代码之家  ›  专栏  ›  技术社区  ›  user2993497

带空列的MYSQL内部联接

  •  -1
  • user2993497  · 技术社区  · 6 年前

    我尝试使用MYSQL的内部连接,使用两个可选子句。但它似乎并没有返回所有的数据。关于如何改进此查询的任何提示?

    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
    

    编辑

    我将标题从“MYSQL INNER JOIN with OR子句”更改为当前的标题,以便更容易找到有相同问题的人。事实证明,这个问题实际上与连接的列具有空值或空值有关。公认的答案解释了问题的原因并提供了解决方案。

    2 回复  |  直到 6 年前
        1
  •  0
  •   ScaisEdge    6 年前

    确保没有空值

    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
    
        2
  •  0
  •   user2993497    6 年前

    我找到了解决办法。根据这个 article INNER JOIN NULL 或空值。上面的答案不起作用,因为这个子句是用来过滤 列在后面 使用 或空列。所以考虑到这些信息,我筛选出 实际中的列 与后面相反的陈述。

    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