[英]SQL: Select Different column depending on other table column value
我對 SQL 很陌生。 目前,我是這樣寫的,根據其他表列值選擇不同的列。
select
IF((SELECT COUNT(*) FROM Language WHERE PSID=53435 and Language='zg')>0,
AddressZG,Address) as Address
from Classes where ID = 1
我需要在 ( Language='uni')
和Language='en')
編寫多個檢查。 我該怎么寫?
目前,我這樣寫以支持多個 if-else 但看起來這不是正確的方法。
select
IF((SELECT COUNT(*) FROM Language WHERE PSID=3593031830770623 and Language='zg')>0,
AddressZG,(select
IF((SELECT COUNT(*) FROM Language WHERE PSID=3593031830770623 and Language='uni')>0,
Address,Address) as Address
from Classes where ID = 1)) as Address
from Classes where ID = 1
我應該如何編寫多個 if-else 以根據其他表列值選擇不同的列?
您可以使用CASE
而不是IF
:
SELECT
CASE WHEN (SELECT COUNT(*) FROM Language WHERE PSID=3593031830770623 and Language='zg') > 0 THEN AdressZG
WHEN (SELECT COUNT(*) FROM Language WHERE PSID=3593031830770623 and Language='uni') > 0 THEN Address
ELSE Address
END AS Address
FROM Classes WHERE ID = 1
我認為您可以使用join
和group by
更直接地做您想做的事情。 我認為你想要的邏輯是:
select coalesce(max( case when language = 'zg' then c.addresszg end),
max( case when language = 'uni' then c.addressuni end),
max(address)
)
from classes c left join
Language l
on l.PSID = 53435
where c.id = 1
計數 -> 存在
SELECT
CASE WHEN EXISTS(SELECT 1 FROM Language WHERE PSID=3593031830770623 and Language='zg') THEN AdressZG
WHEN EXISTS(SELECT 1 FROM Language WHERE PSID=3593031830770623 and Language='uni') THEN Address
ELSE Address
END AS Address
FROM Classes WHERE ID = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.