簡體   English   中英

如何在SQL中合並超過兩(3)個表

[英]How to merge more than two (3) tables in SQL

在類似Facebook的通知系統中,我有三個表,就像這樣。

table1

________________________________
| id |  value_1  |  timestamp  |
|----|-----------|-------------|
| id |  value21  |  2014-05-21 |
| id |  value22  |  2014-05-22 |
|____|___________|_____________|

table2

________________________________
| id |  value_2  |  timestamp  |
|----|-----------|-------------|
| id |  value30  |  2014-05-30 |
|____|___________|_____________|

table3

________________________________
| id |  value_3  |  timestamp  |
|----|-----------|-------------|
| id |  value01  |  2014-05-01 |
| id |  value27  |  2014-05-27 |
|____|___________|_____________|

為了將所有這些數據返回一行,我使用了SQL聯合...

(SELECT value_1  FROM table1)
UNION
(SELECT value_2  FROM table2)
UNION
(SELECT value_3  FROM table3)

...但是它將所有內容匯總到一欄中。 取而代之的是,我需要將結果按時間戳記放在這樣的表

________________________________________________________
| id |  value_1  |  value_2  |  value_3  |  timestamp  |
|----|-----------|-----------|-----------|-------------|
| id |  null     |  null     |  value01  |  2014-05-01 |
| id |  value21  |  null     |  null     |  2014-05-21 |
| id |  value22  |  null     |  null     |  2014-05-22 |
| id |  null     |  null     |  value27  |  2014-05-27 |
| id |  null     |  value30  |  null     |  2014-05-30 |
|____|___________|___________|___________|_____________|

是否可以僅使用SQL而不將工作移交給PHP引擎? 任何想法表示贊賞。

您可以使用union all並按以下order by

SELECT id, value_1, NULL as value_2, NULL as value_3, timestamp
FROM table1
UNION ALL
SELECT id, NULL, value_2, NULL, timestamp
FROM table2
UNION ALL
SELECT id, NULL, NULL, value_3, timestamp
FROM table3
ORDER BY timestamp;

請注意, union allunion效率更高,因為它不返回重復項。

您需要在聯合的每個部分中添加虛擬列:

SELECT value_1
     , cast(null as <type_of_value2>) as value_2
     , cast(null as <type_of_value3>) as value_3
     , ts 
FROM table1 
UNION 
SELECT cast(null as <type_of_value1>) as value_1
     , value_2
     , cast(null as <type_of_value3>) as value_3 
     , ts
FROM table2 
UNION 
SELECT cast(null as <type_of_value1>) as value_1
     , cast(null as <type_of_value2>) as value_2
     , value_3
     , ts 
FROM table3
ORDER BY ts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM