0

我有 3 个表在一个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
4

2 回答 2

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

如您所见,您必须为添加的每个资源在同一列中放置时间戳

于 2013-06-09T13:01:23.450 回答
1

尝试选择每个并给它们相同的列名,即 SELECT ..... AS xname。您可以查看相关的 SQL 文档。

UNION 用于将多个 SELECT 语句的结果组合成一个结果集。

第一个 SELECT 语句中的列名用作返回结果的列名。在每个 SELECT 语句的相应位置列出的选定列应具有相同的数据类型。(例如,第一个语句选择的第一列应该与其他语句选择的第一列具有相同的类型。)

如果对应的 SELECT 列的数据类型不匹配,则 UNION 结果中列的类型和长度会考虑所有 SELECT 语句检索到的值。例如,考虑以下情况:

http://dev.mysql.com/doc/refman/5.0/en/union.html

mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+

| REPEAT('a',1) |
+---------------+
| a             |
| bbbbbbbbbb    |
+---------------+
于 2013-06-09T13:08:18.333 回答