私はそのようなクエリを持っています:
SELECT c.name, i.name FROM inv_invoice_items c
LEFT OUTER JOIN inv_invoice_items i ON i.name = c.name
WHERE c.id_invoice = 2108 AND i.id_invoice = (SELECT id_invoice FROM inv_invoices WHERE id = 2108)
このクエリでは、次のような結果が得られます。
name | name
-------------
pen | pen
ただし、結合なしで選択する場合:
SELECT c.name FROM inv_invoice_items c
WHERE c.id_invoice = 2108
結果は次のとおりです。
name
------
pen
pencil
そして2番目のクエリ:
SELECT i.name FROM inv_invoice_items i
WHERE i.id_invoice = (SELECT id_invoice FROM inv_invoices WHERE id = 2108)
結果を与える:
name
------
pen
最初の結合クエリの結果は次のようになります。
name | name
---------------
pen | pen
pencil | NULL
そのような結果を達成する方法は?その方法でLEFT OUTER JOINが機能するはずだと思いました。事前にご提案いただきありがとうございます。
Ps。修正請求書と修正(関連)請求書の請求書明細の差異を把握する必要があります。
いくつかのサンプルデータ:
create table inv_invoices (id bigint, id_invoice bigint, primary key(id));
create table inv_invoice_items (id bigint, id_invoice bigint NOT NULL, name character varying(100) NOT NULL, primary key (id));
insert into inv_invoices values (2105, NULL), (2106, NULL), (2107, NULL), (2108, 2106);
insert into inv_invoice_items values (1000, 2105, 'pen'), (1001, 2105, 'pencil'), (1002,2106, 'pen'), (1003, 2107, 'rubber'),
(1004, 2107, 'pencil'), (1005, 2108, 'pen'), (1006, 2108, 'pencil');