我有如下的查詢重複值,與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 –