Возможно ли это с выражением CASE в MYSQL?

#mysql #sql #case

#mysql #sql #регистр

Вопрос:

Все, что я читал об использовании CASE, подразумевает, что изменить содержимое отдельного поля можно только в столбце, на который оно ссылается. Есть ли способ ссылаться на поле в другой таблице?

Вместо (просто чтобы использовать случайный пример из Интернета)

 SELECT daysName,
       CASE daysName 
         WHEN "Sunday" THEN "Holiday" 
  

Я хочу что-то вроде:

 CASE table1.column1   
  WHEN table3.column1 = "Yes" THEN table1.column1   80
  

Если нет, то как мне это сделать?

Эти таблицы имеют первичный и внешний ключи, поэтому я могу использовать объединения.

Комментарии:

1. Что бы сделало это ваше гипотетическое утверждение?

2. Вы пробовали это в MySQL, и это не сработало? Если да, то с какими проблемами вы сталкиваетесь?

3. Если значение в table3.column1 равно Yes в любой строке, которой оно соответствует, table1.column1 будет его текущим значением 80. Если нет, то это будет просто его текущее значение

Ответ №1:

Похоже, вы могли бы превратить case выражение в

 CASE table3.column1
  WHEN 'Yes' THEN (table1.column1   80)
  ELSE table1.column1
END
  

Или вы могли бы использовать IF :

 table1.column1   IF(table3.column1 = 'Yes', 80, 0)
  

Вам, конечно, нужно будет присоединиться table3 в любом случае, и вы можете присвоить этому значению псевдоним, поскольку оно больше не является строго полем в базе данных. (MySQL вернет это выражение целиком в качестве имени столбца.)

Ответ №2:

Это:

 CASE table1.column1   
  WHEN table3.column1 = "Yes" THEN table1.column1   80
  

… должно возвращать синтаксическую ошибку при попытке использовать оба варианта синтаксиса для выражения CASE. Без дополнительной информации это должно быть:

 CASE 
  WHEN table3.column1 = "Yes" THEN table1.column1   80
  

..потому что в примере нет ничего, что говорило бы о том, что вы используете table1.column1 для вычисления.

Далее — чтобы использовать table3.column сравнение, вам нужно объединение. Это может быть ВНУТРЕННЕЕ или ВНЕШНЕЕ соединение, возможно, декартово произведение (ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ)… но вы не предоставили информацию о том, какова взаимосвязь между таблицами.