3

それが正しいかどうかはわかりませんが、次のスキーマを見てください。

ここに画像の説明を入力してください

エンティティは、運送業者または顧客のいずれかになります。すべての顧客はキャリアに関連付けられている必要があり、このキャリアは自分の顧客になることができます。

私は立ち往生していて、顧客の名前と彼の運送業者の名前を返す単一のクエリを実行しようとして成功しませんでした。そのような操作を行う方法はありますか?

ありがとう

4

3 に答える 3

2

entity2 回結合し、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)
于 2013-01-17T19:06:58.207 に答える
2

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

これにより、そこから追加情報が必要な場合を除き、キャリア テーブルに再度参加する必要がなくなります。

于 2013-01-17T18:59:45.383 に答える
2

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
于 2013-01-17T18:59:56.777 に答える