データベースに3つのテーブル(、、contracts
およびpartners
)customers
があり、顧客とパートナーの両方にコントラクトを使用できます。
契約データのみをcontracts
テーブルに保持し、customers
テーブルにはidフィールドへの外部キーであるpartners
というフィールドが含まれています。contract_id
contracts
いいえ、契約を選択してリストに表示したいのですが、顧客とパートナーの契約が同時に使用されている場合は、リストに両方を表示したいのですが、機能しません。
私の質問は:
SELECT c.*, p.id AS partner_id, p.name AS partner_name,
cu.id AS customer_id, cu.name AS customer_name
FROM contracts AS c
LEFT JOIN partners AS p ON c.id = p.contract_id
LEFT JOIN customers AS cu ON c.id = cu.contract_id
サンプル:contract
テーブル
のレコードは次のようになります。
id | title | contract_start | contract_end
-------------------------------------------------------------
1 | Test | 2012-10-02 | 2013-10-02
2 | Test2 | 2012-09-27 | 2013-09-27
customers
テーブルのレコードは次のようなものです。
id | code | name | contract_id
-------------------------------------------------------------
1 | 123456 | Customer1 | 1
2 | 654321 | Dummy Co. LTD. | 2
partners
テーブルのレコードは次のようなものです。
id | code | name | contract_id
-------------------------------------------------------------
1 | 789456 | Partner1 | 1
いいえ、3つのレコードのリストが必要です。各レコードには契約が表示され(そのうちの1つが繰り返されることを考慮)、各レコードにはパートナーまたは顧客の名前とIDが表示されます。契約に顧客が関与している場合、パートナーフィールドはそうである必要がnull
あり、その逆も同様です。