**关闭。**此题需要debugging details。目前不接受答复。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
2天前关闭。
Improve this question
我有一个不是我写的SQL选择语句,它返回10,000行;它是正确:
select t.column1, t.column2, t.column3, t.column4 ...
from table1 t
where conditions;
当t.column1等于d.column7,t.column2等于d.column8时,我被要求在末尾添加(table 2d)中的另一列。
我试过这个:
select b.*, d.column7, d.column8, d.column9..
from
(select t.column1, t.column2, t.column3, t.column4 ...
from table1 t
where conditions) b
left outer join
table2 d on b.column1 = d.column7
and b.column2 = d.column8
当我运行这个select
时,我得到了例如15000(超过10,000)行。也许我使用了错误的连接类型,或者我必须以另一种方式使用它。
怎么了?
2条答案
按热度按时间fhity93d1#
简单的怎么样
外部连接可能是您获得比预期更多行的原因。我并不是说它 * 必须 * 不被使用,但是-没有证据表明相反。
pkwftd7m2#
您可以将查询简化为:
table1
和table2
中有重复的行,并且满足连接条件,那么您将获得结果集的该子集的交叉乘法。因此,如果有3行t1.column1
和t1.column2
分别具有值1
和2
,并且有2行t2.column7
和t2.column8
具有相同的值,则输出中将有3x2 = 6行。这就是您的额外行的来源。*如果你不想要额外的行,那么你需要将一个表中的每一行与另一个表中的最多一行匹配: