簡體   English   中英

SQL:根據其他表列值選擇不同的列

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

我認為您可以使用joingroup 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.

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