首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL外部连接3表合并数据

SQL外部连接3表合并数据
EN

Stack Overflow用户
提问于 2014-03-18 16:25:34
回答 6查看 70关注 0票数 0

我希望将3个表连接在一起,并让它返回来自其中一个表的结果为空的数据。

tblCustomer是将始终具有所需结果的主表。然后,它将被绑定到另外两个表tblEvents和tblPending,并且应该返回任何一个表的数据。

示例

代码语言:javascript
复制
tblCustomer.CustomerID       tblEvents.EventID      tblPending.PendingID
1                            50                     NULL
1                            51                     NULL
2                            NULL                   30
2                            70                     NULL
2                            NULL                   90

我试过像这样把桌子连接起来:

代码语言:javascript
复制
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

但它给了我这样的结果:

代码语言:javascript
复制
  CustomerID     EventID      PendingID
  2              70           30
  2              70           90

是否有一种简单的方法使其连接到Customer表,但不尝试连接到附加表。除与客户有关外,暂挂和事件之间没有任何关系。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-03-18 17:04:25

如果您只想要一个事件或未决,您可能希望两个连接的联合,例如。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2014-03-18 16:33:53

您想要的是一个完整的外部连接,而mysql中不存在这个连接,所以您必须进行左外部连接和与右外部连接的联合。

代码语言:javascript
复制
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进行筛选。

票数 0
EN

Stack Overflow用户

发布于 2014-03-18 16:41:56

这将从事件和/或从sql server获得空。

代码语言:javascript
复制
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的值.

代码语言:javascript
复制
... where p.pendingid is null

或事件为空的地方。

代码语言:javascript
复制
... where e.eventsid is null
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22485275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档