Сложности с конструкциями IF/ELSE и CASE в MySql
Формулировка задачи:
Всем доброго.
Помогите допилить запрос. Необходимо что бы в зависимости от условия возвращало разные имена ячеки и ее значения.
SELECT h.street_id, `street_city_id` AS `city_id`, IF(`city_id` > 1, 'obl', 'rai') AS CELL CASE WHEN `city_id` > 1 THEN (SELECT `raion_id` FROM `raion` WHERE raion_id = city_raion_id) ELSE (SELECT `raion_obl_id` FROM `raion_obl` WHERE raion_obl_id = city_raion_id) END AS VAL FROM `house` h INNER JOIN `street` s ON h.street_id = s.street_id INNER JOIN `city` c ON s.street_city_id = c.city_id WHERE `house_id` = '11830'
Решение задачи: «Сложности с конструкциями IF/ELSE и CASE в MySql»
textual
Листинг программы
CASE WHEN `city_id` > 1 THEN (SELECT `raion_id` FROM `raion` WHERE raion_id = city_raion_id) WHEN `city_id` <= 0 THEN (SELECT `raion_obl_id` FROM `raion_obl` WHERE raion_obl_id = city_raion_id) END AS VAL
Объяснение кода листинга программы
- В данном коде используется конструкция CASE WHEN, которая позволяет выполнить проверку условия и в зависимости от его истинности выбрать определенное значение.
- В первом условии (
city_id
> 1) проверяется, больше ли значение переменнойcity_id
единицы. Если это условие истинно, то выполняется запрос внутри скобок. - В запросе внутри скобок (
SELECT
raion_idFROM
raionWHERE raion_id = city_raion_id
) выбирается значение переменнойraion_id
из таблицыraion
, гдеraion_id
равно значению переменнойcity_raion_id
. - Во втором условии (
city_id
<= 0) проверяется, меньше ли или равно значение переменнойcity_id
нулю. Если это условие истинно, то выполняется запрос внутри скобок. - В запросе внутри скобок (
SELECT
raion_obl_idFROM
raion_oblWHERE raion_obl_id = city_raion_id
) выбирается значение переменнойraion_obl_id
из таблицыraion_obl
, гдеraion_obl_id
равно значению переменнойcity_raion_id
. - Результат выполнения запросов сохраняется в переменную
VAL
. - Все эти действия выполняются при условии, что переменная
city_raion_id
имеет значение, которое не равно нулю.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д