2017-11-03 6 views
0

タイトルが意味をなすと思いますが、私はクエリを書くことにかなり新しいです。SQLite:2つのSELECTステートメントの結合から新しいテーブルを作成しようとしたときにテーブルのエイリアスが見つかりません

私のテーブルエイリアスが次のクエリで見つからない理由を理解しておきたいと思います。 ON句を付けずに実行すると(FirefoxのSQLite Managerで)実行されますが、この句では、 'no such column t2.story_id'が表示されます。

注 - 作成したダミークエリを使用しています問題を簡素化するためです。私の最終的なクエリは全く同じ構造になるので、エラーや何かを見たら私が改善してもらえるようにしてください。誰かが同じテーブルから2つのステートメントを引っ張っているのだろうかと疑問に思っている人は、同じテーブルから引き出す2つのステートメントを結合する必要がありますが、同時に実行できない非常に特殊な処理は必要です。少なくとも、私はこれがハハになる方法だと言われました。

SELECT * FROM 
    (
      SELECT * FROM 
      (
       SELECT story_id, role_type, user_id 
       FROM cur_cycle_role_activity 
      ) t1 /* end of the first inner select statement t1 */ 

       LEFT JOIN /* Begin Join Statement */ 
       (
        SELECT * FROM 
        (
         SELECT story_id, workstream_num FROM cur_cycle_role_activity 
       ) t2 /* end of the second inner select statement t2 */ 
       ) /* End Join */ 

       ON t1.story_id = t2.story_id /* On clause for Join above */ 

    ) /* This is the end of the topmost select statement */ 

エラーメッセージ:あなたはサブクエリでエイリアスを参照することができませんので

[ no such column: t2.story_id ] 
+2

「SELECT * FROM(サブクエリ)」がすべて必要なのはなぜですか? – Barmar

+1

サブクエリはなぜですか?しかし、あなたは '/ * End Join * /'を持つ別名を使うべきです。 –

+0

@Barmar私は自分が何をしているのかを理解しやすくしました。申し訳ありませんが悪い習慣や不要な場合。これが問題の原因ですか?もしそうなら、私はそれらを取り除いて再試行することができます! – Andy

答えて

1

SELECT * FROM (...)でクエリをラップには、問題を引き起こしています。

SELECT t1.story_id, t1.role_type, t1.user_id, t2.workstream_num 
FROM (
    SELECT story_id, role_type, user_id 
    FROM cur_cycle_role_activity) AS t1 
LEFT JOIN (
    SELECT story_id, workstream_num 
    FROM cur_cycle_role_activity) AS t2 
ON t1.story_id = t2.story_id 
+0

これは私が必要としていたものです。答えと説明をありがとう!今は動作していますが、私はこれを念頭に置いて、より大きなクエリを書き直す予定です! – Andy

関連する問題