我希望将3个表连接在一起,并让它返回来自其中一个表的结果为空的数据。
tblCustomer是将始终具有所需结果的主表。然后,它将被绑定到另外两个表tblEvents和tblPending,并且应该返回任何一个表的数据。
示例
tblCustomer.CustomerID tblEvents.EventID tblPending.PendingID
1 50 NULL
1 51 NULL
2 NULL 30
2 70 NULL
2 NULL 90我试过像这样把桌子连接起来:
dbo.tblEvents
LEFT OUTER JOIN dbo.tblCustomer
ON dbo.tblEvents.CustomerID = dbo.tblCustomer.CustomerID
LEFT OUTER JOIN dbo.tblPending
ON dbo.tblCustomer.CustomerID = dbo.tblPending.CustomerID但它给了我这样的结果:
CustomerID EventID PendingID
2 70 30
2 70 90是否有一种简单的方法使其连接到Customer表,但不尝试连接到附加表。除与客户有关外,暂挂和事件之间没有任何关系。
发布于 2014-03-18 17:04:25
如果您只想要一个事件或未决,您可能希望两个连接的联合,例如。
SELECT tblCustomer.CustomerID, tblEvents.EventID, null AS tblPending.PendingID FROM dbo.tblCustomer LEFT OUTER JOIN dbo.tblEvents ON dbo.tblEvents.CustomerID = dbo.tblCustomer.CustomerID
UNION
SELECT tblCustomer.CustomerID, null AS tblEvents.EventID, tblPending.PendingID FROM dbo.tblCustomer LEFT OUTER JOIN dbo.tblPending ON dbo.tblCustomer.CustomerID = dbo.tblPending.CustomerID发布于 2014-03-18 16:33:53
您想要的是一个完整的外部连接,而mysql中不存在这个连接,所以您必须进行左外部连接和与右外部连接的联合。
LEFT OUTER JOIN dbo.tblCustomer ON dbo.tblEvents.CustomerID = dbo.tblCustomer.CustomerID
LEFT OUTER JOIN dbo.tblPending ON dbo.tblCustomer.CustomerID = dbo.tblPending.CustomerID
UNION
RIGHT OUTER JOIN dbo.tblCustomer ON dbo.tblEvents.CustomerID = dbo.tblCustomer.CustomerID
RIGHT OUTER JOIN dbo.tblPending ON dbo.tblCustomer.CustomerID = dbo.tblPending.CustomerID 在此之后,应该按照正确的顺序组合表,并且可以通过非空字段或特定id进行筛选。
发布于 2014-03-18 16:41:56
这将从事件和/或从sql server获得空。
select customerid, eventid, pendingid
from tblcustomer c
left join tblevents e
on c.customerid = e.customerid
left join tblPending p
on c.customerid = p.customerid您可以添加where子句,以获得挂起为null的值.
... where p.pendingid is null或事件为空的地方。
... where e.eventsid is nullhttps://stackoverflow.com/questions/22485275
复制相似问题