如何在使用子查询时消除重复项

时间:2018-10-01 19:07:27

标签: sql database

这可能是一个简单的问题,但我需要有人来解释。我正在尝试在条件price_paid> 10000(它从另一个表:car_purchases)中从表car_employee检索数据,并且正在使用以下查询。

select eid, fname, lname, home_phone
from dbo.car_employee
where eid in (select eid from dbo.car_purchases where price_paid > 10000);

这给了我正确的答案,但是,当我单独执行内部查询时,它给了我eid的重复值,但是,整个查询没有给出任何重复的值。那里的数据如何过滤?

PS:我使用JOIN作为替代,但是,我得到了重复项。

2 个答案:

答案 0 :(得分:2)

重复项没有被过滤掉。 IN就是这样工作的。 WHERE子句不能增加行数(除非少数情况下在少数数据库中例外)。

无论列表是常量还是子查询,都是如此。因此,它们执行相同的操作:

where x in (1)
where x in (1, 1, 1, 1, 1, 1, 1)

如果要使行相乘,请改用join

答案 1 :(得分:0)

考虑一下:

您的外部查询来自car_employee表,因此,除非car_employee具有相同EID的多个记录,否则它们将显示1次(或0次)

“ eid IN的位置”仅是限制,而不是联接,因此它无法将记录添加到car_employee表中;或者更好的做法是,在car_employee表中每条记录最多只能得到1条结果。

 select 1 where 1 in (1,2,3,1,2,3,1,2,3) 

将导致一行-“ 1”