我正在尝试通过两个可选子句使用MYSQL的INNER JOIN。但是它似乎并没有返回所有数据。关于如何改善此查询的任何提示?
SELECT *
FROM ImportedContacts t1
INNER JOIN users t2
ON (t1.Emails = t2.email OR
t1.Phones = t2.Phone)
WHERE t1.Username = 'user' AND
NOT t2.email = ''
ORDER BY t2.first_name
LIMIT 60
已编辑
我将标题从“带有OR子句的MYSQL INNER JOIN”更改为当前标题,以使遇到相同问题的人更容易找到它。事实证明,这个问题实际上与JOINED具有空或空值的列有关。接受的答案说明了问题的原因并提供了解决方案。
答案 0 :(得分:0)
确保您也没有空值
SELECT *
FROM ImportedContacts t1
INNER JOIN users t2 ON (t1.Emails = t2.email OR t1.Phones = t2.Phone)
WHERE t1.Username = 'user'
AND ( NOT t2.email = '' OR t2.email IS NOT NULL )
ORDER BY t2.first_name LIMIT 60
答案 1 :(得分:0)
我找到了解决方案。根据此article,INNER JOIN
将不适用于具有NULL
或空值的字段。上面的答案无效,因为用于过滤NULL
列的CLAUSE是在INNER JOIN
或空列求值后运行NULL
的。因此,考虑到此信息,我过滤掉了实际NULL
语句中的INNER JOIN
列,而不是after之后。
SELECT *
FROM importedcontacts
INNER JOIN users
ON ( users.email = importedcontacts.emails
OR ( ( importedcontacts.phones = users.phone )
AND NOT importedcontacts.phones = ''
AND NOT users.phone = '' ) )
WHERE importedcontacts.username = 'user'
ORDER BY users.first_name
它奏效了!谢谢你们的帮助。