2016-04-18 1 views
0

クエリで複数のSELECTステートメントを使用してデータベースからデータを取得しようとしましたが、エラーが発生します。クエリは次のとおりです。複数のSELECTステートメントを使用すると、すべての派生テーブルには別のエイリアスエラーがある必要があります

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

エラーが取得されている:

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

私は

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

に私のクエリを変更しようとしたが、再び同じエラーを得ました。私は、エイリアスを必要とするクエリのどの部分を理解することはできませんし、テーブルから

+0

各派生テーブルに一意のエイリアスを与えます – Strawberry

+0

[派生テーブルごとに固有のエイリアスが必要]可能性があります(http://stackoverflow.com/questions/1888779/every-derived-table- – Strawberry

+0

Tのように、FROM句のサブクエリにNOT EXISTSのために使用する必要があります。 –

答えて

0

ザ・エイリアスを必要とする理由クエリは意味をなさないように見えるけれども

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

に動作します。それはもはや構文エラーではありません

+0

なぜそれは意味をなさないのですか? '(SELECT * FROM players == lid = 0)'は私にすべてのプレイヤーのリストを与え、 '(SELECT * FROM players = where lid = 1) 'は特定の属性を持つプレイヤーのリストを私に与えます。 'WHERE NOT EXISTS'はすべての属性を持っていないプレーヤーを与えます。これを実装するのは間違った方法だと思いますか? – Ankush

+1

'lid = 0'のプレイヤーから選んだ場合、' lid = 1'のプレイヤーは既に除外されているので意味がありません。冗長で、おそらく非効率です。ああ、 – Rob

+0

'lid = 0'はすべてのプレーヤーのリストです。すべてのユニークプレイヤーが含まれています。 'lid = 1'は、基本的に、' 0'のプレーヤーのうちのいくつかを含むが、 '' lid''を '1'に設定したリストです – Ankush

関連する問題