[英]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 JOIN
的ON
子句變為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.