Сложности с конструкциями 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

Объяснение кода листинга программы

  1. В данном коде используется конструкция CASE WHEN, которая позволяет выполнить проверку условия и в зависимости от его истинности выбрать определенное значение.
  2. В первом условии (city_id > 1) проверяется, больше ли значение переменной city_id единицы. Если это условие истинно, то выполняется запрос внутри скобок.
  3. В запросе внутри скобок (SELECTraion_idFROMraionWHERE raion_id = city_raion_id) выбирается значение переменной raion_id из таблицы raion, где raion_id равно значению переменной city_raion_id.
  4. Во втором условии (city_id <= 0) проверяется, меньше ли или равно значение переменной city_id нулю. Если это условие истинно, то выполняется запрос внутри скобок.
  5. В запросе внутри скобок (SELECTraion_obl_idFROMraion_oblWHERE raion_obl_id = city_raion_id) выбирается значение переменной raion_obl_id из таблицы raion_obl, где raion_obl_id равно значению переменной city_raion_id.
  6. Результат выполнения запросов сохраняется в переменную VAL.
  7. Все эти действия выполняются при условии, что переменная city_raion_id имеет значение, которое не равно нулю.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5