2017-07-28 6 views
0

Ich versuche, aus einer Tabelle von users auszuwählen.Wie verwende ich WHERE innerhalb von SELECT?

Aber ich erhalte eine Fehlermeldung, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS n1) LIMIT 0, 25' at line 7

Ich verstehe nicht, was ich tue hier falsch

SELECT * FROM (SELECT 
       n1.userid, 
       n1.country, 
       n1.gender 
       FROM users 
       WHERE n1.country = 'US' 
       AND n1.gender = '1' AS n1) 
+2

setzen die 'AS n1' nach dem') '' –

+1

mysql' und 'tsql' Tags sind in der Regel unvereinbar. Es ist hilfreich, Datenbankfragen mit der entsprechenden Software (MySQL, Oracle, DB2, ...) und der Version, z. 'sql-server-2014'. Unterschiede in Syntax und Funktionen beeinflussen oft die Antworten. Beachten Sie, dass 'tsql' die Auswahl einschränkt, aber die Datenbank nicht angibt. – HABO

Antwort

6

Ich denke, das ist das, was Sie wollen:

SELECT * 
FROM (SELECT n1.userid, n1.country, n1.gender 
     FROM users n1 
     WHERE n1.country = 'US' AND n1.gender = '1' 
    ) n1; 

as gehört nicht in die WHERE Klausel. Sie benötigen n1 als Tabellenalias in der Unterabfrage, wenn Sie sie verwenden möchten, um Spaltennamen zu qualifizieren. Und Sie sollten der äußeren Abfrage einen Tabellenalias geben.

Hinweis: Offensichtlich wird die Unterabfrage nicht benötigt, aber ich schätze, Sie wollen es wirklich für Ihr tatsächliches Problem.

+0

Könnte einfacher zu verstehen sein, wenn 'n1' nicht als zwei unterschiedlich skalierte Aliase verwendet wird (ich tendiere dazu, dies möglichst zu vermeiden, und OP spricht nicht fließend ...) – jleach

1

Sie haben den Alias ​​an der falschen Stelle platziert. Versuchen

SELECT * FROM (SELECT 
       n1.userid, 
       n1.country, 
       n1.gender 
       FROM users AS n1 -- <AS n1> this should be here 
       WHERE n1.country = 'US' 
       AND n1.gender = '1') 

oder

SELECT * FROM (SELECT 
       n1.userid, 
       n1.country, 
       n1.gender 
       FROM users 
       WHERE n1.country = 'US' 
       AND n1.gender = '1') AS n1 -- or here 

Wenn jedoch die Abfrage nicht nur eine vereinfachte Form ist, kann die gesamte Abfrage auch ohne die Unterabfrage geschrieben werden:

SELECT userid, country, gender 
FROM users 
WHERE country = 'US' 
AND gender = '1' 
1

Es sollte sein wie unten, da sich auf Inline-View-Alias ​​bezieht. Auch hier versuchen Sie, denselben Alias ​​zu verwenden, um Ihre Spalte in Unterabfrage zu verweisen, was ein weiterer Fehler ist.

SELECT * FROM (SELECT 
       userid, 
       country, 
       gender 
       FROM users 
       WHERE country = 'US' 
       AND gender = '1') AS n1