簡體   English   中英

用於查詢一個或另一個表的SQL查詢

[英]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.

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