2012-08-01 242 views
0

我有一個客戶表和一個地址表。每個客戶在地址表中可以有多個條目,但只有其中一個條目可以標記爲「主要」。我已經把查詢拉起客戶和他們的主地址如下:mysql左連接多列where

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

我發現一個缺陷中,如果客戶還沒有添加一個地址到他們的帳戶,他們不會因爲沒有「主要」地址而出現。

解決此問題的最佳方法是什麼?

回答

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

輝煌。沒有意識到你可以在這樣的JOIN中使用AND。謝謝! – TH1981 2012-08-01 21:26:14

+1

是的,你可以使用任何表達式;函數,甚至子查詢。但是,爲了獲得最佳性能,請堅持列對比和/或常量。上面的查詢將正常工作;可能更好或者與其他人提出的「OR」構建一樣好。不過,我覺得這種說法更清晰,更清晰,不太冗長。 – 2012-08-01 21:29:02

0

嘗試修改查詢到AND (addresses.primary = 1 OR addresses.primary IS NULL)

0

只要爲左側的數據時,沒有地址。
在下面的示例中,我使用主字段,但在沒有匹配關鍵字的情況下,左連接子句中的任何字段的表格
都爲空。

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)