我的查询如下,
SELECT count(*) from Employee where e_id IN (121, 234, 536, 234).
在上述查询中,234
重复两次。
但上述查询会返回count = 3
而不是4的结果。
我的问题是当我没有使用DISTINCT
时,如何在选择查询中过滤重复数据。
或数据库如何处理IN子句,是List
(重复值)还是Set
(唯一值)或两者都没有。
答案 0 :(得分:2)
e_id IN (121, 234, 536, 234)
用作谓词:对于Employee
的每一行,检查e_id
的值以查看它是否与列表中的任何值匹配。因此(121, 234, 536, 234)
被视为一个集合。
答案 1 :(得分:2)
WHERE
子句仅过滤行。它不会使它们倍增。
因此,如果一行匹配一个条件或所有条件无关紧要。该行只是被过滤或未过滤。
如果您需要重复项,请使用JOIN
:
select count(*)
from employee e join
(select 121 as e_id union all
select 234 union all
select 536 union all
select 234
) matches
using (e_id);