繁体   English   中英

MYSQL - 仅在LEFT JOIN中的行不存在时选择

[英]MYSQL - Select only if row in LEFT JOIN is not present

我有2个简单的mysql表。 第一个叫做邮件,有2行:

sender | receiver
Marley | Bob 
Saget  | Bob 

第二个叫块,有1行:

blocker | blocked
  Bob   | Marley

我想从第一个表中选择发送Bob电子邮件但未在阻止表中阻止的发件人。 所以结果应该是:

sender 
 saget

我尝试了以下查询,但它没有返回结果:

SELECT * FROM mail  
LEFT JOIN block ON (block.blocker = 'Bob') 
WHERE (block.blocked <> mail.sender)

左连接将为不匹配生成null行。
这是您需要过滤的那些null行。

SELECT * FROM mail  
LEFT JOIN block ON (block.blocker = 'Bob') 
WHERE block.blocker IS NULL

加入一个固定值是一种扼杀,然而,一个更常见的连接(给定你的表)将是:

SELECT * FROM mail  
LEFT JOIN block ON (block.blocker = mail.receiver
                and block.blocked = mail.sender)<<-- these should match
WHERE block.blocker IS NULL                     <<-- select only mismatches
AND mail.receiver like 'bob';

试试这个:

SELECT sender
FROM mail m
WHERE NOT EXISTS (SELECT 1 FROM block 
                  WHERE blocker = m.receiver 
                  AND blocked = m.sender)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM