2016-03-06 3 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

Я хочу присоединиться. union удаляет повторяющиеся строки. – 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 'UNION 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

Не знаю, почему это получило бы понижение. –

+0

В подзапросе нет необходимости. – lad2025

+0

@ lad2025. , , Ваш ответ лучше и первым. Я просто не думаю, что этот заслуживает нисходящего звена, потому что он также точен (и я подозреваю, что оба метода материализуют промежуточные результаты). –