仅在联接表中存在记录的情况下,我才尝试根据联接表中的条件从用户表中选择一行。如果记录不存在,我想返回该行。我只想在存在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”的行
答案 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);