2017-11-03 2 views
0

제목이 이해되기를 바랍니다. 쿼리 작성에 상당히 익숙하며 용어 등이 불안정하기를 바랍니다.SQLite : 두 개의 select 문을 조인하여 새 테이블을 만들 때 테이블 별칭을 찾을 수 없습니다.

왜 내 테이블 별칭이 다음 쿼리에서 발견되지 않는지 이해하고 싶습니다. 내가 ON 절없이 실행하면 (Firefox의 SQLite Manager에서) 실행되지만 절을 사용하면 'no such column t2.story_id'가 표시됩니다.

주 - 제가 만든 더미 쿼리를 사용하고 있습니다. 문제를 단순화하라. 내 최종 쿼리는 정확히 동일하게 구성되므로 오류 또는 개선 된 사항을 볼 수 있다면 공유하십시오. 누군가 두 테이블이 같은 테이블에서 빠져 나오는 이유에 대해 궁금해하는 사람이있을 경우, 같은 테이블에서 가져 오는 두 개의 명령문을 결합해야하지만 동시에 수행 할 수없는 매우 구체적인 작업을 수행해야합니다. 적어도 나는 이것이 haha를하는 길이었다라고 들었다.

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

하위 쿼리가 전혀없는 이유는 무엇입니까? 그러나'/ * Join 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