次のようなコードがあります。
SELECT *
FROM invoices
LEFT JOIN shipments ON (
shipments.id = invoices.shipment_id
)
LEFT JOIN details ON (
details.id = invoices.detail_id
)
基本的には、請求書テーブルから識別子で出荷テーブルと詳細テーブルを検索したいと思います。ただし、次のような方法でこれら 2 つのテーブルを結合したいとも考えています。
SELECT *
FROM shipments
JOIN details ON (shipments.order = details.order)
基本的に、(invoices.shipment_id、invoices.detail_id) のいずれかが見つかった場合に両方のテーブルを取得する方法が必要です。ただし、結合で後のテーブルを参照することはできないため、次のようなことはできません。
SELECT *
FROM invoices
LEFT JOIN shipments ON (
shipments.id = invoices.shipment_id
OR shipments.order = details.order
)
LEFT JOIN details ON (
details.id = invoices.detail_id
)
両方のテーブルをプルしながらこれを行う方法はありますか?
わかりやすくするために編集します。
これはテーブル構造のサンプルです
CREATE TABLE invoices (
id integer PRIMARY KEY,
shipment_id integer,
detail_id integer,
data text
)
CREATE TABLE shipments (
id integer PRIMARY KEY,
data text
)
CREATE TABLE details (
id integer PRIMARY KEY,
shipment_id REFERENCES shipments (id),
data text
)
invoices.shipment_id
を含む場合と含まない場合がありshipments.id
、 を含む場合と含まinvoices.detail_id
ない場合がありますdetails.id
。
有効な ID が含まれている場合invoices.shipment_id
は、次のようにする必要があります。
SELECT
shipments.data as shipment_data,
details.data as detail_data,
FROM invoices
JOIN shipments ON (invoices.shipment_id = shipments.id)
JOIN details ON (details.shipment_id = shipments.id)
invoices.detail_id
有効な ID が含まれている場合は、次のことを行う必要があります。
SELECT
shipments.data as shipment_data,
details.data as detail_data,
FROM invoices
JOIN details ON (invoices.detail_id = details.id)
JOIN shipments ON (details.shipment_id = shipments.id)
これら2つをきれいに組み合わせる方法はありますか?