2012-06-20 4 views
0

비슷한 테이블을 가지고 있지만 fk는 공유하지 않는 5 개의 테이블 (tbl1, tbl2, tbl3, tbl4, tbl5)이 있습니다. 타임 스탬프 (각 테이블에있는 열)의 순서로 항목 목록을 컴파일해야합니다. 나는 다음을 시도했지만 작동하지 않았다조인없이 여러 테이블의 특정 필드를 선택하십시오.

SELECT 
    t1.id, t1.name, t1.created, 
    t2.id, t2.name, t2.created, 
    t3.id, t3.name, t3.created, 
    t4.id, t4.name, t4.created, 
    t5.id, t5.name, t5.created 
FROM tbl1 t1, tbl2 t2, tbl3 t3, tbl4 t4, tbl5 t5; 

물론, 위의 정렬 타임 스탬프 열을 기준으로,하지만 난이 "ORDER에 추가하기 전에이 작업 같은 것을받을 필요가 없을 것입니다 BY 절.

(보기를 만들지 않고) 5 개의 테이블 (일부 테이블이 비어있는 경우 이벤트)에서 데이터를 반환하는 쿼리를 실행하는 방법이 있습니까?

답변

1

당신이 찾고있는 소리는 UNION ALL입니다.

SELECT t1.id, t1.name, t1.created FROM tbl1 t1 
UNION ALL 
SELECT t2.id, t2.name, t2.created FROM tbl2 t2 
UNION ALL 
SELECT t3.id, t3.name, t3.created FROM tbl3 t3 
UNION ALL 
SELECT t4.id, t4.name, t4.created FROM tbl4 t4 
UNION ALL 
SELECT t5.id, t5.name, t5.created FROM tbl5 t5 
ORDER BY 3 

UNION ALL 연산자 기본적 단일 결과 집합으로 질의의 결과를 연접. 모든 표현식에서 표현식의 수와 각 표현식의 데이터 유형이 일치해야합니다. (하나의 쿼리에 추가 열을 포함해야하는 경우 다른 쿼리에 해당 표현식 (더미 자리 표시 자 포함)을 추가해야합니다.

이렇게 쿼리하면 다음과 같은식이 포함되는 것이 도움이됩니다. 행 반환하는 소스 쿼리 나에게 말한다 (열). 순서에 따라 전체 결과 집합에 적용

SELECT 't1' as source, t1.id, t1.name, t1.created FROM tbl1 t1 
UNION ALL 
SELECT 't2', t2.id, t2.name, t2.created FROM tbl2 t2 
UNION ALL 
SELECT 't3', t3.id, t3.name, t3.created FROM tbl3 t3 
UNION ALL 
SELECT 't4', t4.id, t4.name, t4.created FROM tbl4 t4 
UNION ALL 
SELECT 't5', t5.id, t5.name, t5.created FROM tbl5 t5 
ORDER BY 4 

참고, 당신은 열 위치에 의해 정렬 식을 참조 할 필요

0

용도 : UNION ALL

SELECT id, name, created FROM tbl1 
UNION ALL 
SELECT id, name, created FROM tbl2 
UNION ALL 
SELECT id, name, created FROM tbl3 
UNION ALL 
SELECT id, name, created FROM tbl4 
UNION ALL 
SELECT id, name, created FROM tbl5 
+0

이제 타임 스탬프 열을 주문 하시겠습니까? 각 선택에 대해 "ORDER BY timestamp"를 수행하면 결과가 여전히 테이블별로 정렬되고 타임 스탬프별로 정렬되지 않을까요? 즉, 테이블 5에 첫 번째 타임 스탬프가있는 항목이 있으면 다른 항목보다 먼저 표시해야합니다. – Brds

관련 문제