2017-08-07 13 views
0

番号1または8のいずれかが孤立してロードされている名前を引き出そうとしていますが、クエリではそれを実行していません。クエリNOT INアシスタント

だから名前はわずか8を持っている場所を確認する場合、または1つだけ持っていますが、両方ではない

CREATE TABLE Table1 
    (`name` varchar(7), `number` int); 

INSERT INTO Table1 
    (`name`, `number`) 
VALUES 
    ('renee', 1), 
    ('renee', 8), 
    ('eugene', 1), 
    ('jacques', 1), 
    ('jacques', 8), 
    ('avril', 8); 

SELECT Name FROM Table1 WHERE Number IN ('1') 
AND Number NOT IN ('8') 

答えて

4

保持、その後、1つのまたは8数値に制限し、名前によって集約するかもしれない、このアプローチする最も簡単な方法1つの異なる番号を持つ名前のみ。

SELECT Name 
FROM Table1 
WHERE Number IN (1, 8) 
GROUP BY Name 
HAVING COUNT(DISTINCT Number) = 1 
+1

Hmmm ...なぜ 'COUNT(DISTINCT NAME)= 1'ですか?このクエリはすべての行を表示します。 – Rokuto

+1

私はちょうどタイプミスだと思っています。 「別個の番号」でなければなりません... –

+0

本当に醜いタイプミス...ごめんなさい –

1

記録(名前、番号が)>=1に変更することができる=1一意でない場合、正確に頼まれたものを、それは例えば動作しないことがないクエリを次に示します。

SELECT Name FROM Table1 WHERE Number in (1,8) 
group by name 
having count(case when number=1 then 1 end)=1 
and count(case when number=8 then 1 end)=0 
or count(case when number=1 then 1 end)=0 
and count(case when number=8 then 1 end)=1 
+0

クエリが正常に機能します。 – Jacques