2012-03-05 4 views
0

MYSQL b.tableの一致がないときにa.tableを保持している間にA.tableとb.tableを残します。MYSQL a.tableを保持している間にA.tableとb.tableを残します。

SELECT * FROM sales_customer a LEFT JOIN sales_contact b 
ON a.customer_id = b.customer_id 
ORDER BY CASE WHEN company_name = '' THEN lname ELSE company_name END ASC 

は私に取得し、この:

Array (
    [0] => 54 
    [customer_id] => 
) 

何b.table一致しません。

私はこれが必要です。

Array (
    [0] => 54 
    [customer_id] => 29 
) 

任意の提案を?

以下の解決策が機能しました。ご協力いただきありがとうございます。

SELECT *、COALESCE(a.customer_id、0)CASE BY a.customer_id = b.customer_idオーダーでLEFT OUTER JOIN sales_contactのB sales_customer FROM CUSTOMER_ID AS COMPANY_NAME = '' THEN LNAME ELSE COMPANY_NAME ENDのASC

+0

を選択 'ですか[0]、[a.customer_id]' – ScottJShea

+0

という記述は、しかし、私は構文が正しく動作するために取得するように見えるカント100%論理的なようです。 SELECT *をあなたの提案に置き換えますか? –

+0

@ruakhはIよりも優れていた – ScottJShea

答えて

1

はこのようにそれを使用します。

SELECT 
    *, 
    COALESCE(b.customer_id, 0) AS customer_id 
FROM sales_customer a 
LEFT JOIN sales_contact b ON a.customer_id = b.customer_id 
ORDER BY 
    CASE WHEN company_name = '' THEN lname ELSE company_name END ASC 
+0

さて、皆さん、おかげさまでお礼を申し上げます。 2番目に私にとって最善の答えは実際にはこれのバリエーションでした。上記の解決策を投稿してください。再度、感謝します。 –

1

COALESCE()を使用してみてください。最初の非NULL値を返します。

+0

OPの問題を誤解していると思います。 'a.customer_id'は決して' NULL'にはなりません。 – ruakh

1

SELECT *(「すべてのフィールドを選択」)の代わりに、実際に必要なフィールドを指定する必要があります。SELECT 54 AS `0`, a.customer_id, ... FROM ...。それだけではなく一般的にはより良い方法です。 SELECT *, a.customer_id FROM ...

あなたが本当には、すべてのフィールドを選択するにはSELECT *を書きたい場合は

、あなたはまだPHPで以前のような名前のフィールドを上書きします最後にフィールドを追加することができます。

+0

それを得て、私はこれを知っていたはずです。練習は完璧です。ご協力いただきありがとうございます。 –

+0

@LawrenceGadette:ようこそ。 – ruakh

関連する問題