仅当INNER JOIN记录存在时,才在INNER JOIN上添加sql语句条件

时间:2018-07-07 23:04:47

标签: mysql sql

仅在联接表中存在记录的情况下,我才尝试根据联接表中的条件从用户表中选择一行。如果记录不存在,我想返回该行。我只想在存在INNER JOIN记录且contact_blocked!= 1时不返回该行。

使用下面的语句,当users_to_users记录存在并且contact_blocked的值= 0时,我实现了我想要的。返回该行。当联系人被阻止时,将不会返回任何内容。很好但是,另外,当尚无INNER JOIN记录存在时,我仍想与用户一起返回该行,因为它们尚未被阻塞并且不存在任何关系。不知道该怎么做。

这是我想要没有联接的东西:

SELECT users.user_id 
FROM users
WHERE users.username = 'Danny Boy' 

这是我想要的联接:

SELECT users.user_id 
FROM users 
INNER JOIN users_to_users 
ON users.user_id = users_to_users.user_id 
AND users_to_users.contact_user_id ='123' 
WHERE users.username = 'Danny Boy' 
AND users_to_users.contact_blocked != 1

我希望连接条件仅在连接记录存在时才适用。否则,我希望第一种情况适用。

编辑

所需结果。

如果users_to_users记录存在,则仅当users_to_users.contact_blocked!= 1时,才返回用户名“ Danny Boy”的行。

如果users_to_users记录不存在,请返回用户中“ Danny Boy”的行

1 个答案:

答案 0 :(得分:1)

我想你想要

SELECT u.user_id 
FROM users u LEFT JOIN
     users_to_users utu
     ON u.user_id = utu.user_id AND utu.contact_user_id = '...' 
WHERE u.username = '...'  AND
      (utu.contact_blocked = 1 OR utu.contact_blocked IS NULL);