繁体   English   中英

唯一联接:2个主键到一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM