2016-08-16 9 views
-3

私のクエリですが、ここに示した結果は間違っています。SQL IN()が正しく機能していません

SELECT winner 
FROM nobel 
WHERE 
    subject = 'Economics' AND 
    yr IN (
    SELECT min('yr') 
    FROM nobel 
    WHERE subject = 'Economics' 
); 
+1

は私たち**サンプルデータを表示**、実際に選択されますどのような私たちを見ると、*これは「間違った」である理由を説明し* ..... –

答えて

3

私はこの問題は、それが常にconstant_valueあるMIN(constant_value)として評価されるようになり、文字列としてオプティマイザアドレスにこれを作るMIN()内部yrを、ラップ引用符であると考えています。

試してみてください。@sagiが指摘するように

SELECT winner FROM nobel 
WHERE subject='Economics' 
     AND yr IN (SELECT min(yr) FROM nobel WHERE subject='Economics'); 
+0

はい、どうもありがとう!私は少し間違いをします...あなたの答えをありがとう! – porkie

1

問題がyr周りの単一引用符です。私はちょうど相関句が=と一緒に、このようなクエリのために、より典型的であることを指摘したい:

SELECT n.winner 
FROM nobel n 
WHERE n.subject = 'Economics' AND 
     n.yr = (SELECT min(yr) FROM nobel n2 WHERE n2.subject = n.subject); 

ここin=の使用があなたにマイナーなポイントのように見えるかもしれません。しかし、=は、最大で1行が返され、inは複数の行が返される可能性があることを示しています。これは、SQLオプティマイザにとって重要な違いです。

+0

はい、ありがとうございます!私は少し間違いをします...あなたの答えをありがとう!そして私は 'IN'の代わりに '='を使用しようとし、結果も正しいですが、2つの勝者があるので2つの行を示します。たいていの行が返されていると言っています。「hava何かが間違っているか、私は誤解していますか? – porkie

0
SELECT winner 
FROM nobel 
WHERE 
    subject = 'Economics' AND 
    yr IN (
     SELECT min(yr) # ---> just remove quotes in your query, it will work 
     FROM nobel 
     WHERE subject = 'Economics' 
    ); 
関連する問題