我有两张桌子:
表格1:-
ID1
1
1
1
1
4
5
表2:-
Id2
2
2
1
1
1
8
我想通过联接显示table1的ID1中存在的table2的所有ID2
我用了 :-
select ID2 from Table2 t2 left join Table1 t1
on t2.Id2=t1.Id1
但这给出了重复的结果:
Id2
1
1
1
1
1
1
1
它应该只向我显示1的3倍,因为它在表2中显示为3倍。
请帮忙。
您将值1
与4行Table1
和3行匹配,Table2
这就是为什么看到12行的原因。您需要其他JOIN
条件。您可以添加ROW_NUMBER
和执行INNER JOIN
以达到所需的结果。
WITH Cte1 AS(
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY Id1 ORDER BY (SELECT NULL))
FROM Table1
),
Cte2 AS(
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY Id2 ORDER BY (SELECT NULL))
FROM Table2
)
SELECT c2.Id2
FROM Cte2 c2
INNER JOIN Cte1 c1
ON c1.Id1 = c2.Id2
AND c1.rn = c2.rn
但是,无需使用即可获得所需的结果JOIN
。
SELECT *
FROM Table2 t2
WHERE EXISTS(
SELECT 1 FROM Table1 t1 WHERE t1.Id1 = t2.Id2
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句