我要保持一個應用程序誰的數據庫是有點失控了,我有以下挑戰加入3個表:SQL:聯合2個表,然後加入另一個表。有沒有更好的方法來做到這一點?
表1 時間戳,ZID,AAA
表2 時間戳,ZID,BBB
table3 id,some,other,data
因此,表1和表2需要在它們的時間戳列上進行連接和排序。我還需要保留table1的aaa和table2的bbb列,並能夠區分它是aaa還是bbb。然後我需要通過它的zid列將它加入到另一個表中。
這是我工作的SQL本:
SELECT *
FROM
table3
LEFT JOIN
(
SELECT table1.timestamp AS timestamp,
table1.zid,
table1.aaa AS responses,
'aaas'
FROM table1
UNION ALL
SELECT table2.timestamp AS timestamp,
table2.zid,
table2.aaa AS responses,
'bbbs'
FROM table2
) aaasAndbbbs ON table3.id = aaasAndbbbs.zid
ORDER BY timestamp ASC;
上面的SQL不正是我想要的,但我想知道是否有更好的方法。在這裏,我使用「aaas」列來區分它是aaa還是bbb--這看起來有點冒險。有沒有更好的方法去做我想要的?
你並不真正加入table1和table2,你只是組合數據集。定義源字段來源的附加列似乎是正確的方法。如果沒有某種標誌,數據是來自'aaa'列還是'bbb'列,你還能怎麼知道?這些表的商業用途是什麼? 'aaa'和'bbb'是非常通用的... –
aaas列是我正在使用的標誌。我目前也無法修改數據庫 – red888
@ user1028270:您能否更多地瞭解一下table1和table2中數據的性質?如果可能的話,我會盡量避免使用'UNION'(例如,如果table1包含當前數據,並且table2具有歷史記錄,則查詢可以很容易地在沒有聯合的情況下重寫)。 – a1ex07