2016-04-18 8 views
0

Ich versuche, mehrere SELECT-Anweisungen in einer Abfrage zu verwenden, um Daten aus der Datenbank zu erhalten, aber ich bekomme einen Fehler. Die Abfrage ist:Jede abgeleitete Tabelle muss ihren eigenen Alias ​​haben - Fehler bei der Verwendung mehrerer SELECT-Anweisungen

SELECT * 
     FROM (SELECT * 
       FROM players 
       WHERE lid = 0) 
     WHERE NOT EXISTS (SELECT * 
          FROM players 
          WHERE lid = 1) 

Der Fehler ist erhalten ist:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1248 Every derived table must have its own alias'

Ich versuchte, meine Anfrage an

SELECT * 
     FROM (SELECT * 
       FROM players 
       WHERE lid = 0) 
     WHERE NOT EXISTS (SELECT * 
          FROM players 
          WHERE lid = 1) AS T 

Wechsel bekam aber den gleichen Fehler wieder. Ich kann nicht, welcher Teil der Abfrage verstehen einen Alias ​​braucht und warum

+0

Geben Sie jeder abgeleiteten Tabelle einen eindeutigen Aliasnamen – Strawberry

+0

Mögliches Duplikat von [jede abgeleitete Tabelle muss ihren eigenen Alias ​​haben] (http://stackoverflow.com/questions/1888779/every-derived-table- must-have-its-own-alias) – Strawberry

+0

als T müssen Sie für die Unterabfrage der FROM-Klausel verwenden, nicht für NOT EXISTS –

Antwort

0

Die von der Tabelle wird ein Alias ​​

SELECT * 
     FROM (SELECT * 
       FROM players 
       WHERE lid = 0) as T 
     WHERE NOT EXISTS (SELECT * 
          FROM players 
          WHERE lid = 1) 

arbeiten

braucht Obwohl die Abfrage keinen Sinn zu machen scheint. Es ist kein Syntaxfehler mehr

+0

Warum macht es keinen Sinn? '(SELECT * FROM Spieler WHERE Lid = 0)' gibt mir eine Liste aller Spieler und '(SELECT * FROM Spieler WHERE Lid = 1)' gibt mir eine Liste von Spielern mit bestimmten Attributen. "WO NICHT EXISTIERT" gibt mir dann Spieler, die nicht alle Attribute haben. Denken Sie, dass dies ein falscher Weg ist, um es zu implementieren? – Ankush

+1

Es macht keinen Sinn, denn wenn man von Spielern mit 'lid = 0 'auswählt, dann schließt es bereits Spieler aus, bei denen' lid = 1 'ist. Es ist redundant und wahrscheinlich ineffizient. – Rob

+0

oh. 'lid = 0' ist eine Liste aller Spieler. Es enthält alle einzigartigen Spieler. 'lid = 1' ist im Grunde genommen eine Liste, die einige der Spieler von' 0' enthält, deren Deckel jedoch auf '1' gesetzt ist – Ankush

Verwandte Themen