[英]Unique Join: 2 Primary Keys to one column
我遇到的问题是使用3个表Customer,Purchase和Workflow。
CustomerID是客户表的主键,是3位INT EG。.123
PurchaseID是购买表的主键,是8位INT EG。.12345678
工作流包含用户当时正在运行的工作流的详细信息。 视任务而定。 它可能看起来像这样。
WFID EntityID Type Ref
771 123 Customer 1
772 12345678 Purchase 2
773 124 Customer 1
774 125 Customer 1
775 12345679 Purchase 2
这两个表的主键混在单个的entityID列中,这使我很难连接。 我已经设法在看起来像(ON Workflow.EntityID =)之后的case语句上进行了这种连接。
ON Workflow.EntityID =)
Case when ref = 1 THEN customer.customerID
When ref = 2 THEN purchase.purchaseID
END
但是我正在运行的查询变得如此缓慢且无响应,以至于它并不是真正的解决方案。
有没有其他人对这种类型的联接有其他经验,在这种联接中,列将来自不同表的2个主键混合在一起?
我是否缺少明显的东西?
这样的一个条件join
使得它真的很难优化查询。 尝试将其编写为两个单独的联接:
from workflow wf left outer join
customer c
on c.customerID = wf.EntityID and wf.ref = 1 left outer join
purchase p
on p.purchaseID = wf.EntityID and wf.ref = 2
引擎可以在优化这些方面做得更好。
您可以使用将执行相同工作的联合。 这将起作用,但是表的设计不是很好。 在这种情况下,您应该重新考虑数据库设计。
--query--
where ref = 1 and Workflow.EntityID = customer.customerID
union all
--query--
where ref = 2 and Workflow.EntityID = purchase.purchaseID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.