2016-12-09 17 views
0

誰でも私にヒントを教えてください。なぜ次のクエリが構文エラーを投げるのですか?名前付きテンポラリテーブルのSQL構文エラー

SELECT * 
    FROM 
    (
     (SELECT cu.ID id 
       , name 
       , ego_id 
       , u.fb_id 
      FROM contact_users cu 
      JOIN users u 
      ON cu.ego_id = u.ID 
     ) temp 
    LEFT 
    JOIN fb_user 
     ON temp.fb_id = fb_user.user_fb_id 
    ) T4 

ERROR 1064 (42000): 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 'T4'... 

私はT4を削除しても問題ありません。私は、MySQL 5.5.47を使用しています

+1

アークンサブクエリ – Mihai

+0

内部テーブルが非常に大きいので3つのテーブルを直接ジョインすると、selectが良い選択になるかもしれませんが、3テーブルジョインでは構文の問題は解決しません – barracuda317

+0

***クエリは構文エラーを投げますか?*** T4にはselectまたはfromがありません。最初の '('と 'Ending')T4'を削除します。もし結果セットが存在しなければ、エイリアスすることはできません。 – xQbert

答えて

-1

のどちらかがQuery 1またはQuery 2を持って

クエリ1

SELECT * 
FROM 
    (
     SELECT * 
     FROM 
      (
       SELECT cu.ID as id, name, ego_id, u.fb_id 
       FROM contact_users as cu 
       JOIN users as u 
       ON cu.ego_id = u.ID 
      ) temp 
     LEFT OUTER JOIN fb_user 
      ON temp.fb_id = fb_user.user_fb_id 
    ) T4 

クエリ2

SELECT cu.ID as id, name, ego_id, u.fb_id, fb_user.* 
FROM contact_users as cu 
JOIN users as u 
ON cu.ego_id = u.ID 
LEFT OUTER JOIN fb_user 
ON u.fb_id = fb_user.user_fb_id 

私が好むクエリ2

+0

contact_usersに30列が含まれていても?私はそれが良いアイデアかもしれないと思っていました。参加前に選択してください – barracuda317

+0

質問は「なぜ、次のクエリが構文エラーを投げるのですか?」ではなく、「どのように機能クエリを取得できますか? – Strawberry

+0

@Strawberry私は 'Query1'を調べることを願っていますが、OPがクエリの問題を理解している可能性があります。 – Viki888

0

なぜ次のクエリが構文エラーをスローするのですか?

インラインビューが存在しない場合、エイリアスできないためです。

T4を取り外すと、エンジンは操作の順番を見るだけです。エイリアスを追加すると、整形式のインラインビューが存在するとみなされ、存在しない適切な構文(少なくともSELECTとFROM)が検索されます。

は、簡単に言えば:

別名T4が選択またはからまったくありません。この解決するために:

  • それらを追加すると、SQL (初期とエンディング) T4(それらは必要ありません)
  • リファクタリングを削除(最初の場所でなぜインライン・ビューそれが必要ではないのですか?。)

詳細

ますr Tempエイリアスは、それ自身で実行できる完全で正確なクエリであるため動作します。

AS
SELECT cu.ID id 
       , name 
       , ego_id 
       , u.fb_id 
      FROM contact_users cu 
      JOIN users u 
      ON cu.ego_id = u.ID 

(SELECT cu.ID id 
      , name 
      , ego_id 
      , u.fb_id 
    FROM contact_users cu 
    JOIN users u 
    ON cu.ego_id = u.ID 
) temp 
LEFT 
JOIN fb_user 
    ON temp.fb_id = fb_user.user_fb_id 

が結果セットを生成するための完全で正確なSQL文ではありません。ご覧のとおり、これにはキーワード「SELECT」と「FROM」がありません。私はあなたが左の結合を排除することができ、それが動作すると思うが、私はそれが望ましい結果の結果を満たすとは思わない。

T4を削除することで、エンジンは()の間のデータを有効なSQL文として解析するのではなく、()が操作の順序で表示され、エンジンが文法エラーを認識しない外側の部分には問題はありません。

関連する問題