有一个查询,用于选择一些数据。我正在创建一个抑制表,它将忽略包含某些数据的行。
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/