这可能是一个简单的问题,但我需要有人来解释。我正在尝试在条件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作为替代,但是,我得到了重复项。
答案 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”