有一个查询,用于选择一些数据。我正在创建一个抑制表,它将忽略包含某些数据的行。

suppression: occasion_id | days_before

   reminder: id | days_before | occasion_id


我正在使用NOT EXIST来忽略某些提醒的选择。

查询是

SELECT id
  from Reminder AS r
 WHERE NOT EXIST (SELECT 1
                    FROM Suppression s
                   WHERE s.occasion_id  = r.occasion_id
                     AND s.days_before = r.days_before)

Reminder:1) 101| 1 |18
         2) 102| 7| 18

Suppresion: 18 | 1


应该忽略第一个提醒,而应该包含第二个提醒。

例如,如果抑制表包含case_id-18和days_before-1,则select应该忽略包含这些数据的提醒。

在第二次提醒的情况下,子查询也返回“ 1”。即使WHERE子句之后的语句不产生结果,为什么也会发生?

最佳答案

您加入的条件不正确。
将加入条件从s.id = r.id更改为s.occasion_id = r.occasion_id

SELECT r.*
FROM Reminder AS r
inner JOIN Supression s ON s.occasion_id = r.occasion_id
AND s.days_before <> r.days_before


Fiddle

您的查询也可以..只需更改加入条件

SELECT id
  from Reminder AS r
 WHERE NOT EXISTs (SELECT 1
                    FROM Supression s
                   WHERE s.occasion_id = r.occasion_id
                     AND s.days_before = r.days_before)

关于mysql - 查找基于NOT EXIST匹配某些约束的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23609687/

10-14 11:53