如何在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中还有另一个值,则如何排除。 (没有范围!)
答案 0 :(得分:12)
Select col1,col2
From table
Where col1 not in (Select col1 from table where col2 not in (1,20))
答案 1 :(得分:1)
使用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
,{{1列中的{,20
- 如果允许重复,它仍然适合请求,但你没有提到过)。对于重复的情况也是如此:
1
(当然,这也适用于普通情况)
答案 2 :(得分:0)
您也可以使用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)