それが正しいかどうかはわかりませんが、次のスキーマを見てください。
エンティティは、運送業者または顧客のいずれかになります。すべての顧客はキャリアに関連付けられている必要があり、このキャリアは自分の顧客になることができます。
私は立ち往生していて、顧客の名前と彼の運送業者の名前を返す単一のクエリを実行しようとして成功しませんでした。そのような操作を行う方法はありますか?
ありがとう
それが正しいかどうかはわかりませんが、次のスキーマを見てください。
エンティティは、運送業者または顧客のいずれかになります。すべての顧客はキャリアに関連付けられている必要があり、このキャリアは自分の顧客になることができます。
私は立ち往生していて、顧客の名前と彼の運送業者の名前を返す単一のクエリを実行しようとして成功しませんでした。そのような操作を行う方法はありますか?
ありがとう
entity
2 回結合し、name
列のエイリアスを指定します。carrier
追加のフィールドが必要ない場合は、最後の結合を削除します。
select customer_entity.name as customer_name, customer.credit, -- additional customer fields...
carrier_entity.name as carrier_name, carrier.carrier_stuff -- additional carrier fields...
from entity as customer_entity
inner join customer on (customer.id_entity = customer_entity.id_entity)
inner join entity as carrier_entity on (customer.id_carrier = carrier_entity.id_entity)
inner join carrier on (carrier.id_entity = carrier_entity.id_entity)
id_carrier をキャリアのエンティティ ID として解釈しています:
select ec.name as CustomerName, eca.name as CarrierName
from customer c join
entity ec
on c.id_entity = e.id_entity join
entity eca
on c.id_carrier = eca.id_entity
これにより、そこから追加情報が必要な場合を除き、キャリア テーブルに再度参加する必要がなくなります。
entity
タイプごとに 1 回ずつ、テーブルに対して 2 回結合する必要があります。それらのエイリアス (ca, cu
以下) を使用して、SELECT
リスト内のそれぞれを参照します。
SELECT
/* Carrier info */
ca.id_entity AS carrier_id_entity,
ca.name AS carrier_name,
ca.date AS carrier_date,
carrier.carrier_stuff,
/* Customer info */
cu.id_entity_as AS customer_id_entity,
cu.name AS customer_name,
cu.date AS customer_date,
customer.discount,
customer.payment
FROM
carrier
JOIN customer ON customer.carrier_id = carrier.id_entity
/* JOIN first against entity for carrier */
JOIN entity ca ON carrier.id_entity = ca.id_entity
/* and again between customer and entity */
JOIN entity cu ON customer.id_entity = cu.id_entity