2016-11-20 3 views
1

Ich habe die folgende SQL-Anweisung und ich möchte Daten von Benutzer Tabelle abrufen, wo Benutzer-ID ist nicht in einer anderen Tabelle von column_one und column_two.Warum SQL NOT IN() -Operator nicht funktioniert?

Ich weiß nicht, warum diese Aussage einen Fehler zurück:

Diese Version von MariaDB unterstützt noch nicht 'LIMIT & IN/ALL/ANY/SOME Unterabfrage'

Also mit diesem Fehler I entfernen sie die LIMIT-Anweisung und jetzt heißt es:

Operand 1 Spalte enthalten sollte (n)

ich kann sehen, S QL möchte, dass ich nur eine Spalte in der Unterabfrage auswähle, aber das möchte ich nicht.

Wie kann ich es schaffen, all diese Fehler zu vermeiden und eine gültige SQL-Anweisung mit meiner Filterung zurückzugeben?

Dies ist der SQL-Code, den ich versuchte:

SELECT u.username, u.firstname, u.lastname,u.id,u.school 
     FROM users u 
      WHERE u.id NOT IN(
       SELECT user_two,user_one FROM friends 
        WHERE user_one !='8' 
         OR user_two !='8' 
      ) 
+2

Änderung es UND user_two –

+0

Es hat funktioniert! ... aber ich brauche Erklärung .... Ich habe das UND-Filterung verwendet, aber nicht so. können Sie erklären? – lernyoung

Antwort

0

Logischer haben Sie eine asimmetric Verwendung von IN-Operator

die beiden Teile des in Klausel

die gleiche Anzahl von Komponenten enthalten muss

Sie sollten

SELECT u.username, u.firstname, u.lastname,u.id,u.school 
    FROM users u 
     WHERE u.id NOT IN( 
      SELECT id FROM friends 
       WHERE user_one !='8' 
        OR user_two !='8' 
     ) 

oder

verwenden
SELECT u.username, u.firstname, u.lastname,u.id,u.school 
    FROM users u 
     WHERE (u.id1, u.id2) NOT IN( 
      SELECT user_two,user_one FROM friends 
       WHERE user_one !='8' 
        OR user_two !='8' 
     ) 

oder das Ergebnis ist impredictable

Verwandte Themen