我有3个表在UNION
中连接在一起。 union中的每个表都有一个名为timestamp
的列。我需要将所有时间戳合并在一起,以便它们只显示为一列。
到目前为止,这是我的查询;
SELECT ID, T.T_ID, T.name, T.pic, T.timestamp,
(SELECT COUNT(*) FROM track_plays WHERE T_ID = T.T_ID) AS plays,
(SELECT COUNT(*) FROM track_downloads WHERE T.T_ID) AS downloads,
NULL S_ID, NULL status, NULL timestamp,
NULL G_ID, NULL gig_name, NULL date_time, NULL lineup, NULL price, NULL currency, NULL G_pic, NULL ticket, NULL venue, NULL timestamp
FROM TRACKS T
UNION ALL
SELECT ID, NULL T_ID, NULL name, NULL pic, NULL timestamp, NULL plays, NULL downloads,
S.S_ID, S.status, S.timestamp,
NULL G_ID, NULL gig_name, NULL date_time, NULL lineup, NULL price, NULL currency, NULL G_pic, NULL ticket, NULL venue, NULL timestamp
FROM STATUS S
UNION ALL
SELECT ID, NULL T_ID, NULL name, NULL pic, NULL timestamp, NULL plays, NULL downloads,
NULL S_ID, NULL status, NULL S_ts,
G.G_ID, G.gig_name, G.date_time, G.lineup, G.price, G.currency, G.pic AS G_pic, G.ticket, G.venue, G.timestamp
FROM GIGS G
我会举一些例子,但只有ID
和时间表。
这就是我的要求
ID timestamp
1 2:00:00
2 5:00:00
3 9:32:00
这就是目前发生的事情
ID T.timestamp S.Timestamp G.timestamp
1 00:00:00 NULL NULL
2 NULL 20:00:00 NULL
3 NULL NULL 08:00:32
答案 0 :(得分:1)
基本方法(如果您想区分数据的位置,则添加第三列)
select ID, T.teimestamp, 1 from TRACKS T
UNION ALL
select ID, S.teimestamp, 2 from STATUS S
UNION ALL
select ID, G.teimestamp, 3 from GIGS G
正如您所看到的,您必须为添加的每个资源在同一列中放置时间戳
答案 1 :(得分:1)
尝试选择每个并给它们相同的列名,即SELECT ..... AS xname。您可以看到SQL文档。
UNION用于将多个SELECT语句的结果合并到一个结果集中。
第一个SELECT语句中的列名用作返回结果的列名。在每个SELECT语句的相应位置中列出的选定列应具有相同的数据类型。 (例如,第一个语句选择的第一列应该与其他语句选择的第一列具有相同的类型。)
如果相应SELECT列的数据类型不匹配,则UNION结果中列的类型和长度会考虑所有SELECT语句检索的值。例如,请考虑以下事项:
mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a |
| bbbbbbbbbb |
+---------------+