[英]How to exclude records with certain values in sql
如何在sql(MySQL)中排除具有特定值的記錄
Col1 Col2
----- -----
A 1
A 20
B 1
C 20
C 1
C 88
D 1
D 20
D 3
D 1000
E 19
E 1
返回Col1(和Col2),但僅當Col2中的值為1或20時,如果還有另一個值(1或20除外)則不返回
期望的結果:
Col1 Col2
----- -----
A 1
A 20
B 1
但不是C,D和E,因為除了1或20之外,Col2中有一個值
我已經使用了Col2的虛擬值,只有兩個值(1和20),但實際上還有更多值。
我可以使用IN('1','20')作為值1和20,但如果在Col2中還有另一個值,則如何排除。 (沒有范圍!)
Select col1,col2
From table
Where col1 not in (Select col1 from table where col2 not in (1,20))
使用SUM()
SELECT
*
FROM
t
INNER JOIN
(SELECT
SUM(IF(Col2 IN (1, 20), 1, -1)) AS ranges,
col1
FROM
t
GROUP BY
col1
HAVING
ranges=2) as counts
ON counts.col1=t.col1
更新 :雖然它會為不重復的名單工作,它可能會導致一系列錯誤的表重復值(即1
, 20
, 20
, 1
列-它會重復是否允許還是放不下請求,但是你沒有提到了)。 對於重復的情況,也是一種方式:
SELECT
t.*
FROM
t
INNER JOIN
(SELECT
col1,
col2
FROM
t
GROUP BY
col1
HAVING
COUNT(DISTINCT col2)=2
AND
col2 IN (1, 20)) AS counts
ON test.col1=counts.col1
(當然,這也適用於普通情況)
您也可以使用NOT EXISTS
子句執行相同的操作,
Select A.COL1,A.COL2
From MYTABLE A
where NOT EXISTS
(Select COL1 from MYTABLE B where A.COL1=B.COL1 and
COL2 NOT IN (1,20)
GROUP BY COL1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.