SQL: выберите Другой столбец в зависимости от значения другого столбца таблицы - PullRequest
1 голос
/ 09 марта 2020

Я совсем новичок в 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 для выбрать другой столбец в зависимости от другого значения столбца таблицы?

Ответы [ 3 ]

1 голос
/ 09 марта 2020

Я думаю, что вы можете делать то, что хотите, напрямую, используя join и group by. Я думаю логика c вы хотите:

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 
1 голос
/ 09 марта 2020

Вы можете использовать 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
0 голосов
/ 09 марта 2020

COUNT -> EXISTS

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...