簡體   English   中英

如何在sql中排除具有特定值的記錄

[英]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

更新 :雖然它會為不重復的名單工作,它可能會導致一系列錯誤的表重復值(即120201列-它會重復是否允許還是放不下請求,但是你沒有提到了)。 對於重復的情況,也是一種方式:

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)

liveDemo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM