2011-09-14 8 views
1

私は2つのテーブルを持っています:1つはtransacctions用で、もう1つは請求用です。これは、請求書を生成するトランザクションである可能性があります。請求書を生成しない承認された取引はありません。データがあるかもしれないテーブルを持つMySQLクエリ

問題は両方のテーブルの情報を印刷したいのですが、請求書があるかどうかはわかりません。私は、クエリを実行すると

Transactions: service_bill, auth_number, UserId ... 
Bill: UserId, ... 

いくつかの代表フィールドからです私はそのクエリを使用している場合

SELECT * 
    FROM transactions, bill 
    WHERE MONTH(date) = '09' 
    AND 
    YEAR(date) = 2011 
     (...) 
     AND 
     bill.userId = transactions.userId 
     (...) 
    ORDER BY id_transaction 

、私は「USERIDは」matchs情報を印刷しますが、問題は、請求書を持たない取引を印刷しないことです。一致するユーザーIDはありません。

もし私が場所をリラックスすると、同じ情報が数回印刷されますn:/

最終的には、すべての情報を印刷する必要があります。繰返しはしません。また、未生成の請求書には、取引情報が表示されたときに請求情報がNULLかそのようなものが表示されます。

これを解決する方法はありますか?

+0

外部結合を使用しますか? – Randy

答えて

3

この場合、LEFT JOINを使用します。これにより、第1のテーブルのすべての行と、第2のテーブルにある一致がすべて返されます。不一致の行は、2番目の表の列にNULL値を戻します。

SELECT * 
    FROM transactions t 
     LEFT JOIN bill b 
      ON t.userId = b.userId 
    WHERE MONTH(date) = '09' 
     AND YEAR(date) = 2011 
    (...) 
    ORDER BY t.id_transaction 
+0

ありがとうございます。左JOINは事だった。 – Kani

+0

@ Kani:喜んで助けてください。この回答を隣のチェックマークをクリックして「受け入れ」とマークしてください。 –

関連する問題