2012-03-15 3 views
0

세 번째 테이블의 기본 키와 일치하는 두 테이블을 같은 구조로 조인하려고합니다. 그런 다음 세 번째 테이블의 열을 기준으로 정렬하고 싶습니다.기본 키가 세 번째 테이블과 일치하고 세 번째 테이블이 정렬되는 경우 두 테이블을 결합하는 방법은 무엇입니까?

예 구조 :

SELECT * FROM table1 as t, table3 as t3 WHERE t.id = t3.id 
UNION 
SELECT * FROM table2 as t2, table3 as t3 WHERE t2.id = t3.id 
ORDER BY table3.expire DESC 

은 무엇이를 수 :

Table 1 - id (VARCHAR) | title (VARCHAR) | expire (TIMESTAMP) 

Table 2 - id (VARCHAR) | title (VARCHAR) | expire (TIMESTAMP) 

Table 3 - id (VARCHAR) | views (VARCHAR) | expire (TIMESTAMP) 

내가이 작업을해야하지만 그렇지 않은 생각?

+0

이 시도 : http://stackoverflow.com/questions/213851/sql-query-using-order-by-in-union – John

답변

2

는 정렬에 다음 가입에 표 3에서 정렬 열을 지참합니다.

SELECT table_1.*, table_3.expire as t3_expire 
    FROM table_1 
    INNER JOIN table_3 on table_1.id = table_3.id 
UNION ALL 
SELECT table_2.*, table_3.expire 
    FROM table_2 
    INNER JOIN table_3 on table_2.id = table_3.id 
ORDER BY t3_expire DESC; 
0

일단 유니언을 사용하면 데이터를 구분할 수 없습니다. 그래서 당신은 시도해야한다

SELECT * FROM table1 as t, table3 as t3 WHERE t.id = t3.id 
UNION 
SELECT * FROM table2 as t2, table3 as t3 WHERE t2.id = t3.id 
ORDER BY expire DESC 

당신이 무엇을 요구하고있는만큼 좋은. 마음에 다른 것을 가지고 있지 않다면, 조금 더 공유해야합니다.

+0

을 나는 오류 "# 1052 얻을 - 열 '만료'에를 주문 조항이 모호하다 " – user989990

0

이런 뜻입니까?

SELECT 
    t.id AS t_id, t.title AS t_title, 
    t2.id AS t2_id, t2.title AS t2_title, 
    t3.expire 
FROM table3 AS t3 
LEFT JOIN table1 as t ON t3.id = t.id 
LEFT JOIN table2 as t2 ON t3.id = t2.id 
ORDER BY t3.expire DESC 
0
SELECT * 
FROM Table3 
    LEFT JOIN Table1 ON Table3.id = Table1.id 
    LEFT JOIN Table2 ON Table3.id = Table2.id 
WHERE 
    Table1.id IS NOT NULL AND Table2.id IS NOT NULL 
ORDER BY Table3.expire DESC 
관련 문제