Hier ist meine Abfrage, aber das Ergebnis ist falsch.SQL IN() funktioniert nicht richtig
SELECT winner
FROM nobel
WHERE
subject = 'Economics' AND
yr IN (
SELECT min('yr')
FROM nobel
WHERE subject = 'Economics'
);
Hier ist meine Abfrage, aber das Ergebnis ist falsch.SQL IN() funktioniert nicht richtig
SELECT winner
FROM nobel
WHERE
subject = 'Economics' AND
yr IN (
SELECT min('yr')
FROM nobel
WHERE subject = 'Economics'
);
Ich glaube, das Problem die Anführungszeichen ist die yr
innerhalb der MIN()
Einwickeln, die das Optimierungsprogramm Adresse dieses als String macht, die sie ausgewertet werden verursacht als MIN(constant_value)
die immer constant_value
ist.
Versuchen:
SELECT winner FROM nobel
WHERE subject='Economics'
AND yr IN (SELECT min(yr) FROM nobel WHERE subject='Economics');
ja, vielen Dank! Ich mache einen kleinen Fehler ... Danke für deine Antwort! – porkie
Das Problem ist die einfachen Anführungszeichen um yr
als @sagi weist darauf hin. Ich möchte nur darauf hinweisen, dass eine korrelierte Klausel für eine solche Abfrage typischere ist zusammen mit =
:
SELECT n.winner
FROM nobel n
WHERE n.subject = 'Economics' AND
n.yr = (SELECT min(yr) FROM nobel n2 WHERE n2.subject = n.subject);
Die Verwendung von =
gegen in
hier könnte scheinen, wie ein kleiner Punkt zu Ihnen. =
besagt jedoch, dass höchstens eine Zeile zurückgegeben wird und in
schlägt vor, dass mehrere Zeilen zurückgegeben werden können. Dies ist ein wichtiger Unterschied für den SQL-Optimierer.
ja, vielen Dank! Ich mache einen kleinen Fehler ... danke für deine Antwort! Und ich versuche '=' anstelle von 'IN' zu verwenden und das Ergebnis ist auch korrekt, aber es zeigt zwei Zeilen, weil es zwei Gewinner gibt. Vielleicht hast du gesagt "= sagt, dass höchstens eine Zeile zurückgegeben wird "have etwas falsch oder ich missverstehe ?? – porkie
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'
);
Zeigen Sie uns ** Beispieldaten **, zeigen uns, was in der Tat wird ausgewählt, und erklären, warum * * das ist „falsch“ ..... –