我不知道它是否正确,但请查看以下架构:
实体可以是承运人或客户。每个客户都必须与一个承运人关联,这个承运人可以是自己的客户。
我被卡住了,尝试执行一个返回客户姓名和他的承运人姓名的单一查询但没有成功。有没有办法进行这样的操作?
谢谢
我不知道它是否正确,但请查看以下架构:
实体可以是承运人或客户。每个客户都必须与一个承运人关联,这个承运人可以是自己的客户。
我被卡住了,尝试执行一个返回客户姓名和他的承运人姓名的单一查询但没有成功。有没有办法进行这样的操作?
谢谢
我将 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
表连接两次,每种类型一次。使用它们的别名(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
加入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)