0

MySQLで2つのテーブルを結合しようとしていますが、使用しているクエリは次のとおりです。

SELECT qa_invoicesitems.item_code, qa_invoicesitems.item_unitprice,    qa_invoicesitems.item_subtotal, qa_invoicesitems.item_discount, 
qa_invoicesitems.item_total 
FROM qa_invoicesitems   
RIGHT JOIN qa_invoicesitems_returnlog USING (item_code) 
WHERE invoice_code = 17
UNION
SELECT qa_invoicesitems_returnlog.item_code, qa_invoicesitems_returnlog.item_unitprice, qa_invoicesitems_returnlog.item_subtotal, 
qa_invoicesitems_returnlog.item_discount, qa_invoicesitems_returnlog.item_total 
FROM qa_invoicesitems_returnlog 
LEFT JOIN qa_invoicesitems USING (item_code) 
WHERE returnlog_code = 9

しかし、私は望ましい結果を見ることができません。

グラフィカルな例.. ここに画像の説明を入力してください

誰かが私がこの結果を得る方法を知っていますか?
注: qa_invoicesitems_returnlogデータを置き換えます。

コード:1234、1585、23は、(qa_invoicesitems_returnlog)から取得されます。これらは両方のテーブルに存在するため、残りは単純に表示されます。 ここに画像の説明を入力してください

4

2 に答える 2

1

なぜUNIONを使っているのですか?以下はあなたのクエリと同等だと思います:

SELECT qa_invoicesitems.item_code, qa_invoicesitems.item_unitprice,
       qa_invoicesitems.item_subtotal, qa_invoicesitems.item_discount,
       qa_invoicesitems.item_total
FROM qa_invoicesitems RIGHT JOIN
     qa_invoicesitems_returnlog
     USING (item_code)
WHERE invoice_code = 15 or returnlogcode = 8

テーブルが逆になっているため、LEFT結合とRIGHT結合は同じことを実行しています。

于 2012-05-10T18:34:32.097 に答える
1

あなたのコメントとあなたのイメージに基づいて、私はあなたが望むと言うつもりです:

  • 表2のすべての行qa_invoicesitems_returnlog = 9
  • 表1のすべての行。ただし、表2からの出力にすでに存在するinvoice_code = 17行を除きます。item_id

だから、それを組合として書き出すと、あなたに次のようになります。

SELECT qa_invoicesitems_returnlog.item_code as item_code, 
       qa_invoicesitems_returnlog.item_unitprice as item_unitprice,
       qa_invoicesitems_returnlog.item_subtotal as item_subtotal,         
       qa_invoicesitems_returnlog.item_discount as item_discount, 
       qa_invoicesitems_returnlog.item_total as item_total 
FROM qa_invoicesitems_returnlog
WHERE qa_invoicesitems_returnlog.returnlog_code = 9
UNION
SELECT qa_invoicesitems.item_code as item_code, 
       qa_invoicesitems.item_unitprice as item_unitprice,
       qa_invoicesitems.item_subtotal as item_subtotal,         
       qa_invoicesitems.item_discount as item_discount, 
       qa_invoicesitems.item_total as item_total 
 FROM qa_invoicesitems   
 WHERE qa_invoicesitems.invoice_code = 17
   AND NOT EXISTS (SELECT * FROM qa_invoicesitems_returnlog qir2
                   WHERE qir2.returnlog_code = 9 
                      and qir2.item_code = qa_invoicesitems.item_code)

重要なのは、テーブル2からの出力にすでに存在し、一致するが存在するNOT EXISTSテーブル1()の結果から除外する句です。qa_invoiceitemsitem_code

于 2012-05-10T20:50:35.540 に答える