0

顧客テーブルと住所テーブルがあります。各顧客はアドレス テーブルに複数のエントリを持つことができますが、「プライマリ」としてマークできるエントリは 1 つだけです。次のように、顧客とその主要な住所を取得するためのクエリをまとめました。

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

アドレスがない場合は、左側のデータを含めるだけです。 以下の例では、プライマリ フィールドを使用していますが、一致するキーがない場合
、アドレス テーブルのどのフィールドも左結合句で 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) 
于 2012-08-01T21:25:20.753 に答える
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 に答える