[英]Postgres SQL left outer join on the same table
我有這樣的疑問:
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
和第二個查詢:
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');
試試這個:
SELECT DISTINCT c.name, i.name FROM inv_invoice_items AS c LEFT OUTER JOIN inv_invoice_items AS i ON i.name = c.name AND c.id_invoice = 2108 LEFT OUTER JOIN inv_invoices AS i2 ON i.id_invoice = i2.id_invoice AND i2.id = 2108;
嘗試這個:
SELECT
t.name AS name1,
v.name AS name2
FROM
(
SELECT c.name
FROM inv_invoice_items c
WHERE c.id_invoice = 2108
) AS t
LEFT JOIN
(
SELECT i.name
FROM inv_invoice_items i
WHERE i.id_invoice = (SELECT id_invoice
FROM inv_invoices
WHERE id = 2108)
) AS v ON t.name = v.name;
這會給你:
| NAME1 | NAME2 |
-------------------
| pen | pen |
| pencil | (null) |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.