如何在sql中排除具有特定值的记录

时间:2013-11-22 11:38:59

标签: mysql 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中还有另一个值,则如何排除。 (没有范围!)

3 个答案:

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

更新:虽然它适用于非重复列表,但可能会导致重复值的表设置错误(即120,{{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)

liveDemo