sql

2013-11-22 9 views
10

belirli değerleri ile kayıtları nasıl dışlanır (MySQL) sql belli değerlere sahip kayıtları nasıl dışlanır
sql

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 

Dönüş Col1 (ve Sütun2), fakat Süt2 değeri 1 veya 20 olması durumunda değil, aynı zamanda (1 ya da 20 dışında) başka bir değer olup olmadığını

İstenen sonucu:

Col1 Col2 
----- ----- 
A  1 
A  20 
B  1 

ama C, D ve E, 1 veya 20dışında cOL2 bir değer yoktur, çünkü
Col2 için hayali değerler kullandım ve sadece iki değer (1 ve 20) ama gerçekte biraz daha var.
IN ('1', '20') 1 ve 20 değerleri için kullanabilirim ancak Col2'de başka bir değer varsa nasıl hariç tutulur. (Hayır aralık yoktur!)

cevap

12
Select col1,col2 
From table 
Where col1 not in (Select col1 from table where col2 not in (1,20)) 
+0

Benim için iyi çalışıyor! –

+0

Çok güzel cevap .. basit ve güçlü :) – Mari

1

Kullanım 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 

Güncelleme: dışı tekrarlanan liste için çalışır iken, bu yani 1 (tekrarlanan değerlerle tablo için yanlış sette sonuçlanabilir , 20, 20, 1 sütununda - tekrarlara izin verilirse yine de uygun olacaktır, ancak bundan bahsetmediniz). tekrarlar ile olan durumlarda nerede de bir yolu şudur:,

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 

(ve elbette, çok yaygın durumda çalışır)

+0

Tekrar eder. Ama B 1 (sadece A 1 ve A 20) –

+0

'u bulamıyor. Öyleyse, yanlış anlaşılıyor (yukarıdaki aramaların tam olarak eşleşmesi, yani hem 1 hem de 20 olduğunda). –

0

Ayrıca NOT EXISTS maddesi ile aynı şeyi yapabilirsiniz

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