我有如下的查询重复值,与IN子句选择查询 - 具有IN子句
SELECT count(*) from Employee where e_id IN (121, 234, 536, 234).
在上面的查询,234
重复两次。
但上面的查询返回结果与4 count = 3
代替
我的问题是数据的方式重复被过滤,选择查询时,我没有用过DISTINCT
。
或如何做数据库对待IN子句,是那种List
(重复值)或Set
(唯一值),或者两者都不是的。
我有如下的查询重复值,与IN子句选择查询 - 具有IN子句
SELECT count(*) from Employee where e_id IN (121, 234, 536, 234).
在上面的查询,234
重复两次。
但上面的查询返回结果与4 count = 3
代替
我的问题是数据的方式重复被过滤,选择查询时,我没有用过DISTINCT
。
或如何做数据库对待IN子句,是那种List
(重复值)或Set
(唯一值),或者两者都不是的。
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);
e_id IN (121, 234, 536, 234)
作为谓词工作:对于Employee
的每一行,检查e_id
的值是否与列表中的任何值匹配。所以(121, 234, 536, 234)
在这里被视为一个集合。
如果你想知道对性能的影响,在这里看看http://stackoverflow.com/questions/10944339/mysql-in-clause -performace-in-case-of-list-have-duplicate-elements-and-not-sorte –