2014-07-23 4 views
1

테이블이라는 테이블이 있습니다. TABLES에 TABLE_NAME 열이 있습니다.SELECT column_name FROM (SELECT table_name FROM TABLE_OF_TABLES)

각 TABLE_NAME에 대해 데이터베이스에 테이블이 있습니다. 이 테이블은 모두 구조가 동일합니다.

궁극적으로이 테이블 각각의 UNION 열을 원합니다. 그러나 나는 그 목표에 가까워지고 있지 않습니다.

나는 다음과 같은 쿼리에 붙어 오전 : 오류가 반환

SELECT column_name FROM (SELECT table_name FROM TABLES) T; 

내가 SELECT...FROM (SELECT...FROM)

의 좋은 표현이 어떤 도움이 가장 감사를 보지 못했다 "ERROR 1054 (42S22): Unknown column 'column_name' in 'filed list'.

입니다.

답변

1

정적 쿼리와이를 달성 할 수있는 방법이 없습니다 시도 할 수 있습니다. 당신이 정말로 어떤 이유로이 필요한 경우 동적 SQL을 사용할 필요가

SET @sql = NULL; 

SELECT GROUP_CONCAT(CONCAT('SELECT column_name FROM `', table_name, '`') SEPARATOR ' UNION ALL ') 
    INTO @sql 
    FROM tables; 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

여기에 당신이 항상 저장 프로 시저를 래핑 할 수 데모

호출 측에서 일을 단순화하기 위해 SQLFiddle입니다.

+0

그래서 나는 '좋은 구조'경로에서 너무 멀리 떨어져 있는지 궁금합니다. 나는 여러 테이블을 가지고 있고 여러 함수에 대한 UNION이 필요하다 ... 단지 하나의 큰 테이블을 가져야 하는가? – lhulien

+0

대단히 환영합니다. 귀하의 질문에 대답하면, 당신이 상황에서 자신을 찾을 수있는 사실은 간단하거나 일반적인 것들에 동적 SQL을 사용해야 할 때 거의 항상 db 스키마에 개선의 여지가 있음을 나타냅니다. – peterm

1

당신은

SELECT column_name FROM (SELECT column_name FROM TABLES) T; 

또는

SELECT column_name FROM (SELECT * FROM TABLES) T;