2016-03-06 58 views
1

排序多个表的有3个表:SQL - 我如何通过公共列

MariaDB [test]> DESCRIBE t1; 
+-------+-----------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-----------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
| name | char(150) | NO |  | NULL |    | 
| time | datetime | NO |  | NULL |    | 
+-------+-----------+------+-----+---------+----------------+ 


MariaDB [test]> DESCRIBE t2; 
+-------+-----------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-----------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
| name | char(150) | NO |  | NULL |    | 
| time | datetime | NO |  | NULL |    | 
+-------+-----------+------+-----+---------+----------------+ 


MariaDB [test]> DESCRIBE t3; 
+-------+-----------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-----------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
| name | char(150) | NO |  | NULL |    | 
| time | datetime | NO |  | NULL |    | 
+-------+-----------+------+-----+---------+----------------+ 

我想加入3个表和排序的所有行与time领域。

我该怎么做?

+1

你真的想这些表格'join'在一起,或你想'union'在一起? – sgeddes

+0

我想加入。联合删除重复的行。 – Chalist

+0

样本数据和期望的结果将阐明您想要做什么。 –

回答

4

你可以使用:

SELECT id, name, `time` FROM t1 
UNION ALL 
SELECT id, name, `time` FROM t2 
UNION ALL 
SELECT id, name, `time` FROM t3 
ORDER BY `time` 

,你必须具有相同的架构多个表可能表明设计不佳的模式。

+0

这会删除重复的行! – Chalist

+0

@chalist'联盟ALL'不影响重复 – lad2025

+1

@sagi'ORDER BY'会影响整个查询 – lad2025

2

你不想加入你想要一个UNION:

SELECT * 
FROM 
(
    SELECT id, name, time FROM t1 
    UNION ALL 
    SELECT id, name, time FROM t2 
    UNION ALL 
    SELECT id, name, time FROM t3 
) as dt 
ORDER BY time 
+0

不知道为什么这会得到一个downvote。 –

+0

不需要子查询。 – lad2025

+0

@ lad2025。 。 。你的回答更好,第一。我不认为这个人应该得到一个downvote,因为它也是准确的(我怀疑这种方法实现了中间结果)。 –