#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
сравнение, вам нужно объединение. Это может быть ВНУТРЕННЕЕ или ВНЕШНЕЕ соединение, возможно, декартово произведение (ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ)… но вы не предоставили информацию о том, какова взаимосвязь между таблицами.