2012-03-15 67 views
0

我想連接兩個具有相同結構的表,如果它們匹配第三個表的主鍵。然後我想根據第三個表中的列進行排序。如果主鍵與第三個表匹配並按第三個表排序,我將如何連接2個表?

結構示例:

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

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

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

我想這應該工作,但它並不:

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 

什麼能做到這一點?

+0

試試這個: http://stackoverflow.com/questions/213851/sql-query-using-order-by-in-union – John 2012-03-15 01:20:35

回答

2

從表3使排序列與JOIN,然後排序就可以了。

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 2012-03-15 01:22:59

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 
相關問題