1

2つのテーブルを1つのテーブルに結合するためのSQLを理解するのに助けが必要です。テーブルを組み合わせて、テーブルごとに異なる行にデータを表示したいのですが、以下に示すのは1行だけです。

表は次のとおりです。

CREATE TABLE tenant_invoices(
  invoice_id INT,
  col1 INT,
  col2 INT
)

CREATE TABLE tenant_payments(
  pmt_invoice_id INT,
  colA INT,
  colB INT
)

作成する必要のある一時テーブルは次のとおりです。

CREATE TEMPORARY TABLE tenant_invoices
    SELECT * FROM invoices

CREATE TEMPORARY TABLE tenant_payments
    SELECT * FROM payments

select ti.*, tp.*
from tenant_invoices ti
left join tenant_payments tp
  on ti.invoice_id = tp.pmt_invoice_id
ORDER BY ti.invoice_date DESC;

これにより、2つのテーブルがマージされますが、作成される行は1つだけです。

invoice_id   col1   col2    pmt_invoice_id   colA   ColB
1            ABC    XYZ     1                111    222

テーブルをマージしてすべての列を取得できるようにしたいのですが、データを組み合わせた1つの行ではなく、行を分離して、より論理的な方法でデータをループできるようにします。

invoice_id   col1   col2    pmt_invoice_id   colA   ColB
1            ABC    XYZ     null             null   null
                            1                111    222 

SQLでこれを実現する方法はありますか?

ありがとう。

4

1 に答える 1

3

この結果を達成するには...

invoice_id col1 col2 pmt_invoice_id colA ColB
1 ABC XYZ null null null
                            1 111 222

あなたはUNION ALLそのように使うことができます:

SELECT invoice_id, col1, col2, NULL AS pmt_invoice_id, NULL AS colA, NULL AS col
FROM tenant_invoices
UNION ALL
SELECT NULL, NULL, NULL, pmt_invoice_id, colA, colB
FROM tenant_payments

すでに述べたように、2つのテーブルを単純に積み重ねるには、列を揃えてを使用しますUNION ALL。重複を削除したい場合は、を使用できますUNION

于 2012-12-03T22:53:11.377 に答える