[英]SQL query for joining one or another table
我有兩個表TableA和TableB,其中包含一些數據:
IDA|TDATA IDB|TDATA
---+----- ---+-----
1 | A1 1 | B1
2 | A2 2 | B2
和一個中央表:
ID|TID|TAB|CDATA
--+---+---+-----
10| 1 | A | C1
11| 2 | B | C2
12| 2 | A | C3
中央表中的數據應與表A或表B中的數據連接(連接列TID和TAB)。 TID是對聯接表IDA或IDB中的ID的引用,TAB列定義了應該聯接的表。 因此,查詢的最終結果應如下所示:
ID|TDATA|CDATA
--+-----+-----
10| A1 | C1
11| B2 | C2
13| A2 | C3
此SQL查詢應如何顯示?
你可以做類似的事情
SELECT c.id,
coalesce( a.tdata, b.tdata ) tdata,
c.cdata
FROM central_table c
LEFT OUTER JOIN tableA a
ON( c.tid = a.ida AND
c.tab = 'A' )
LEFT OUTER JOIN tableB b
ON( c.tid = b.idb AND
c.tab = 'B' )
但是,我會在這里嚴重質疑數據模型。 如果您不知道C中的列是引用A還是B中的列,那么在數據模型中通常是不正確的。 修復數據模型將使此操作(以及所有其他查詢,很可能)更易於編寫和優化。
如果您只需要TAB后跟TID,則可以使用以下方法:
SELECT ID, CONCAT(TAB, CAST(TID AS CHAR[2])) AS TDATA, CDATA FROM CentralTable;
如果表名是常量(例如,除了A或B,就沒有其他名稱),則可以執行以下操作:
(SELECT ID, TDATA, CDATA FROM CentralTable a
JOIN TableA b ON (a.ID = b.IDA) WHERE a.TAB = 'A')
UNION ALL
(SELECT ID, TDATA, CDATA FROM CentralTable a
JOIN TableB b ON (a.ID = b.IDB) WHERE a.TAB = 'B')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.