0

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

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

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

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

4

3 回答 3

0
SELECT * 
FROM      customers 
LEFT JOIN addresses 
ON        customers.cust_id = addresses.cust_id
AND       1                 = addresses.primary 
WHERE     customers.status = 1 
于 2012-08-01T21:23:53.837 回答
0

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

于 2012-08-01T21:24:29.953 回答
0

没有地址时只需包含左侧数据。
在下面的示例中,我使用了主字段,但是
当没有匹配的键时,左连接子句中 addesses 表的任何字段都为空。

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) 
于 2012-08-01T21:25:20.753 回答