代码:
Select a.x,
a.y,
b.p,
c.i
from table1 a left join table2 b on a.z=b.z
left join table3 on a.z=c.z;
当我使用上述代码时,我没有得到正确的计数:
我很难弄清楚为什么我会得到不同的数字。根据我的理解,即使在第二次加入后我也应该得到30个计数。
任何人都可以帮我理解这种差异吗?
我正在使用sql server 2012
答案 0 :(得分:2)
table3
中有多个行具有相同的z
值。
您可以通过以下方式找到它们:
select z, count(*)
from table3
group by z
having count(*) >= 2
order by count(*) desc;
如果您最多想要一个匹配,那么outer apply
可能很有用:
Select a.x, a.y, b.p, c.i
from table1 a outer apply
(select top 1 b.*
from table2 b
where a.z = b.z
) b outer apply
(select top 1 c.*
from table3 c
where a.z = c.z
) c;
当然,top 1
应与order by
一起使用,但我不知道您想要哪一行。而且,这可能是一个止损;你应该弄清楚为什么会有重复。
答案 1 :(得分:1)
在您的表table3
中,table1
中每1行包含多于1行。检查两个表中出现的一个值。
您可以使用group by with max function来制作一对一的行。