3

我不知道它是否正确,但请查看以下架构:

在此处输入图像描述

实体可以是承运人或客户。每个客户都必须与一个承运人关联,这个承运人可以是自己的客户。

我被卡住了,尝试执行一个返回客户姓名和他的承运人姓名的单一查询但没有成功。有没有办法进行这样的操作?

谢谢

4

3 回答 3

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表连接两次,每种类型一次。使用它们的别名(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 回答
2

加入entity两次并给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 回答