首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回左联接中不同行的任何行

问返回左联接中不同行的任何行
EN

Stack Overflow用户
提问于 2016-03-09 07:09:05
回答 3查看 48关注 0票数 2

我在其中一个查询中有两个sql查询,我执行左外部联接,两者都应该返回相同的记录no,但返回的任何行在这两个sql查询中都是不同的。

代码语言:javascript
复制
select Txn.txnRecNo 
from Txn 
inner join Person on Txn.uwId = Person.personId 
full outer join TxnInsured on Txn.txnRecNo = TxnInsured.txnRecNo 
left join TxnAdditionalInsured on Txn.txnRecNo = TxnAdditionalInsured.txnRecNo 
where Txn.visibleFlag=1 
and Txn.workingCopy=1 

交还20份纪录

代码语言:javascript
复制
select  Txn.txnRecNo 
from Txn 
inner join Person on Txn.uwId = Person.personId 
full outer join TxnInsured on Txn.txnRecNo = TxnInsured.txnRecNo 
where Txn.visibleFlag=1 
and Txn.workingCopy=1

交回15份纪录

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-09 07:16:29

我怀疑TxnAdditionalInsured表有重复记录。使用distinct

代码语言:javascript
复制
select distinct Txn.txnRecNo 
from Txn 
inner join Person on Txn.uwId = Person.personId 
full outer join TxnInsured on Txn.txnRecNo = TxnInsured.txnRecNo 
left join TxnAdditionalInsured on Txn.txnRecNo = TxnAdditionalInsured.txnRecNo 
where Txn.visibleFlag=1 
and Txn.workingCopy=1
票数 2
EN

Stack Overflow用户

发布于 2016-03-09 07:49:37

left联接将在结果集中至少从联接的左侧生成所有行。

但是,如果您的联接条件是,右侧有多行与左边的特定行相匹配,则该左行将在结果中出现多次(与右行匹配的次数相同)。

因此,如果结果是意外的,您的连接条件就不会像它们所需要的那样严格,或者您没有像您想象的那样理解您的数据。

与其他答案不同,我不建议仅仅添加distinct --我建议您调查您的数据并确定您的ON子句是否需要加强,或者您的数据实际上是否不正确。将distinct添加到“使结果看起来正确”通常是一个糟糕的决定--更愿意进行调查并编写正确的查询。

票数 1
EN

Stack Overflow用户

发布于 2016-03-09 07:13:40

试试这个:

代码语言:javascript
复制
select distinct Txn.txnRecNo --> added distinct here
from Txn 
inner join Person on Txn.uwId = Person.personId 
full outer join TxnInsured on Txn.txnRecNo = TxnInsured.txnRecNo 
left join TxnAdditionalInsured on Txn.txnRecNo = TxnAdditionalInsured.txnRecNo 
where Txn.visibleFlag=1 
and Txn.workingCopy=1 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35885169

复制
相关文章

相似问题

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