データベースに3つのテーブル(、、contractsおよびpartners)customersがあり、顧客とパートナーの両方にコントラクトを使用できます。
契約データのみをcontractsテーブルに保持し、customersテーブルにはidフィールドへの外部キーであるpartnersというフィールドが含まれています。contract_idcontracts
いいえ、契約を選択してリストに表示したいのですが、顧客とパートナーの契約が同時に使用されている場合は、リストに両方を表示したいのですが、機能しません。
私の質問は:
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あり、その逆も同様です。