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

mysql左联接多个where列

  •  0
  • TH1981  · 技术社区  · 14 年前

    我有一张客户表和一张地址表。每个客户在地址表中可以有多个条目,但其中只有一个条目可以标记为“主要”。我将查询汇总在一起,以提取客户及其主要地址,如下所示:

    SELECT * FROM customers LEFT JOIN addresses  
             ON customers.cust_id = addresses.cust_id 
    WHERE customers.status = 1 AND addresses.primary = 1
    

    我发现了一个缺陷,如果客户还没有向他们的帐户添加地址,他们就不会出现,因为没有“主要”地址。

    解决这个问题的最佳方法是什么?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Roland Bouman    14 年前
    SELECT * 
    FROM      customers 
    LEFT JOIN addresses 
    ON        customers.cust_id = addresses.cust_id
    AND       1                 = addresses.primary 
    WHERE     customers.status = 1 
    
        2
  •  0
  •   aknosis    14 年前

    尝试将查询修改为 AND (addresses.primary = 1 OR addresses.primary IS NULL)

        3
  •  0
  •   Steve    14 年前

    当没有地址时,只需包含左侧数据。
    在下面的例子中,我使用主字段,但使用addess表的任何字段
    当没有匹配的键时,在左联接子句中为null。

    SELECT * FROM customers LEFT JOIN addresses   
             ON customers.cust_id = addresses.cust_id  
    WHERE    customers.status = 1 AND 
             (addresses.primary = 1 OR addresses.primary IS Null)