1

私はそのようなクエリを持っています:

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');
4

1 に答える 1

3

代わりにこれを試してください:

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;

SQL フィドルのデモ

これにより、次のことが得られます。

|  NAME1 |  NAME2 |
-------------------
|    pen |    pen |
| pencil | (null) |
于 2013-03-20T08:44:58.740 に答える