SQL内部联接和不参与

时间:2018-09-18 16:28:53

标签: sql join select

我正在尝试运行查询,但不确定为什么返回的记录集偏离60行。

Select t1.*  into #temp1
from NameExt as t1
 join #temp1 as t2
on t1.AN = t2.AN --164172

Select t1.* into #temp3 
from NameExt as t1
where AN in (Select AN from #temp1) --164112

当我与#temp1和#temp2进行相交或除相交时,我没有返回任何行。

真的需要了解为什么两个查询返回的记录集都不相似。

即使返回的行数与第二次查询相同

Select * into #temp3 from NameExt as t1  where exists 
 ( Select 1 from #temp1 as t2 where t1.AN = t2.AN) --164112

非常感谢

3 个答案:

答案 0 :(得分:0)

您的查询不正确。您不能同时选择并创建一个临时表。

选择t1。*到#temp1 从NameExt作为t1  以t2身份加入#temp1 在t1.AN = t2.AN --164172

答案 1 :(得分:0)

根据评论,您可能在#temp1中有多行,而在AN中有相同的值...

   CREATE TABLE x (
     id   INT
   )

   CREATE TABLE y (
     id   INT,
     x_id INT
   )

   INSERT INTO x VALUES (1),    (2),    (3)
   INSERT INTO y VALUES (1, 2), (2, 2), (3, 3)

   SELECT *
   FROM x INNER JOIN y ON x.id = y.x_id

   -- a total of three rows

   -- x.id | y.id | y.x_id
   ------------------------
   --  2   |  1   |   2
   --  2   |  2   |   2
   --  3   |  3   |   3

   SELECT *
   FROM x
   WHERE x.id IN (SELECT y.x_id FROM y)

   -- a total of two rows

   -- x.id
   --------
   --  2
   --  3

http://sqlfiddle.com/#!18/7e1d1/2

答案 2 :(得分:0)

您可以通过执行以下操作轻松查看哪些值导致了问题:

select t2.AN
from #temp1  t2
group by t2.AN
having count(*) > 1;

第二张表中的重复项导致了此问题。你知道如何解决它。 。 。使用inexists