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

实体可以是载体,也可以是客户。每个客户必须与承运人相关联,这个承运人可以是自己的客户。
我被困住了,试图执行一个返回客户的名称和他的运营商的名称的查询,但没有成功。有没有办法做这样的手术?
谢谢
发布于 2013-01-17 19:06:58
两次加入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-17 18:59:45
我将id_carrier解释为承运人的实体标识:
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-17 18:59:56
您需要对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_entityhttps://stackoverflow.com/questions/14386107
复制相似问题