选择带有IN子句的查询 - 在IN子句中具有重复值

时间:2016-09-06 12:03:15

标签: mysql sql distinct

我的查询如下,

SELECT count(*) from Employee where e_id IN (121, 234, 536, 234).

在上述查询中,234重复两次。

但上述查询会返回count = 3而不是4的结果。

我的问题是当我没有使用DISTINCT时,如何在选择查询中过滤重复数据。

数据库如何处理IN子句,是List(重复值)还是Set(唯一值)或两者都没有。

2 个答案:

答案 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);