簡體   English   中英

SQL比較條件列選擇要加入的表

[英]SQL comparison condition column to choose the table to JOIN

一般表:

| id | name | type_id |

SECONDARY1表:

| id | general_id | erynda_kakayato | byaka |

SECONDARY2表:

| id | general_id | konkretnaya_hren |

如何使用GENERAL.TYPE_ID的列值將GENERAL表和SECONDARY之一合並? 以下查詢不起作用,但是邏輯應該是這樣的。

SELECT * 
FROM GENERAL  
   JOIN (CASE WHEN types_id = 1 THEN  'SECONDARY1' 
              WHEN types_id = 2 THEN  'SECONDARY2' END) AS t  
      ON GENERAL.id = t.id

此請求是必需的,因為聯接的類型更改表的值。 不能使用同一表,因為不同表中的屬性和列數取決於列類型GENERAL。

嘗試這個:

SELECT g.* 
FROM GENERAL AS g
LEFT JOIN SECONDARY1 AS s1 
   ON CASE WHEN g.type_id = 1 THEN g.id END = s1.general_id
LEFT JOIN SECONDARY2 AS s2
   ON CASE WHEN g.type_id = 2 THEN g.id END = s2.general_id

如果type_id = 1則僅本質上僅執行第一個LEFT JOIN操作,因為第二個LEFT JOINON子句變為NULL = s2.general_id ,該值永遠無法評估為true

您需要選擇在價值select 如果使用left join ,則可以選擇第一個非NULL值:

select g.*, coalesce(s1.erynda_kakayato, konkretnaya_hren)
from general g left join
     secondary1 s1 
     on s1.general_id = g.id and g.type_id = 1 left join
     secondary s2
     on s2.general_id = g.id and g.type_id = 2 ;

暫無
暫無

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

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