2016-03-28 11 views
-1

ich ein Problem mit Operator haben [NOT] zusammen mit [ALL]SQL verwenden alle und nicht Operatoren

tba Gegeben:

id name 
1 a 
2 b 
3 c 
4 d 
5 e 

tbb:

id name 
6 a 
7 b 
8 c 
9 d 
10 e 

und test:

id name 
4 a 
5 b 
7 c 

ich die folgende Abfrage ausführen:

SELECT id, name 
    FROM tbb 
    WHERE (tbb.id > ALL (SELECT id FROM tba)) 
    AND (NOT tbb.id < ALL (SELECT id FROM test)); 

data A data B

Das Problem in der Reihe ist | 6 | a | Warum es einen Wert zurückgibt < als die aus der Reihe test.id?

+0

warum -1? bitte ... – nikomaster

+0

Könnten Sie eine Liste hinzufügen, was Sie erwarten, dass das Ergebnis sein wird? Vielleicht mit einer Erklärung dessen, was Sie erreichen wollen (zum Beispiel: alle Datensätze in "b" mit einer "id" größer als jede "id" von "a", die nicht zu "test" gehören)? Fügen Sie auch ein Tag für den von Ihnen verwendeten sql hinzu. – Glenn

Antwort

1

Ich bekomme Ihre Frage nicht vollständig. test.id hat drei Werte, 4, 5, 7. Dieser Ausdruck:

tbb.id < ALL (SELECT id FROM test) 

returns "false", weil es nicht wahr für 4 und 5.

Daher ist

NOT tbb.id < ALL (SELECT id FROM test) 

kehrt WAHR.

Als Anmerkung: Ich benutze nicht die ALL/SOME/ANY Operatoren (oder genauer gesagt, verwenden Sie sie sehr, sehr, sehr selten). Ich denke es ist klarer zu schreiben:

tbb.id < (SELECT MIN(id) FROM test) 
Verwandte Themen