Mysql 根据“不存在”查找与特定约束匹配的记录

Mysql 根据“不存在”查找与特定约束匹配的记录,mysql,Mysql,有一个选择某些数据的查询。我正在创建一个抑制表,它将忽略包含某些数据的行 suppression: occasion_id | days_before reminder: id | days_before | occasion_id 我利用不存在来忽略某些提醒的选择 问题是 SELECT id from Reminder AS r WHERE NOT EXIST (SELECT 1 FROM Suppression s

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

suppression: occasion_id | days_before

   reminder: id | days_before | occasion_id
我利用不存在来忽略某些提醒的选择

问题是

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
第一次提醒应忽略,第二次提醒应包括在内

例如,如果抑制表包含时机id-18和日期-1之前,则选择应忽略包含这些数据的提醒


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

我相信,通过简单的左连接和where子句中的IS NULL,可以更轻松地完成您想要完成的任务:

SELECT r.id 
FROM Reminder AS r 
LEFT JOIN Supression s ON s.id = r.id AND s.days_before = r.days_before
WHERE s.id IS NULL

你以错误的条件加入。 将连接条件从
s.id=r.id
更改为
s.sition\u id=r.sition\u 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

我想我误解了你的意思。你能给出一些示例数据(或者更好,一点sql技巧)并展示你想要检索什么吗?我的错!为了提高可读性,我更改了模型,但忘记了在下面的查询中进行相关更改。当(18,7)添加到抑制时,内部连接方法失败。NOT EXIST工作正常。G One,谢谢您的时间。我真的很感激。
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)