带有空列的MYSQL INNER JOIN

时间:2018-09-08 06:48:34

标签: mysql join null inner-join

我正在尝试通过两个可选子句使用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具有空或空值的列有关。接受的答案说明了问题的原因并提供了解决方案。

2 个答案:

答案 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)

我找到了解决方案。根据此articleINNER 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 

它奏效了!谢谢你们的帮助。