Выбор таблицы с помощью предложения case в предложении from

0

У меня есть 8 таблиц, которые содержат различное значение для компьютерной периферии: glpi_device_ram, glpi_device_hdd, glpi_device_gfxcard, glpi_device_sndcard. Каждая таблица имеет одинаковый столбец designation в каждой таблице, содержащей имя устройства. У меня есть таблица glpi_computer_device, которая содержит FK_device, которые содержат идентификатор для каждой приведенной выше таблицы 8 и столбца типа устройства, которые помогают мне решить, какую таблицу (из таблицы 8 выше) следует связать с FK_device, чтобы получить столбец назначения. Я создаю синтаксис sql, но не работаю. Мне нужно знать, разрешена ли выбор таблицы в предложении FROM с использованием предложения CASE? Вот мой код

 SELECT CASE device_type
          WHEN "1" THEN "Casing"
          WHEN "2" THEN "Processor"
          WHEN "3" THEN "RAM"
          WHEN "4" THEN "Harddisk"
          WHEN "5" THEN "Network Card"
          WHEN "6" THEN "Drive"
          WHEN "7" THEN "UNKNOWN"
          WHEN "8" THEN "Graphic Card"
          WHEN "9" THEN "Sound Card"
          WHEN "10" THEN "Other device"
        END AS devicetype, 
        CASE device_type
          WHEN "1" THEN "--"
          WHEN "2" THEN "Frequency"
          WHEN "3" THEN "Size"
          WHEN "4" THEN "Capacity"
          WHEN "5" THEN "Mac Address"
          WHEN "6" THEN "Memory Size"
          WHEN "7" THEN "--"
          WHEN "8" THEN "Memory Size"
          WHEN "9" THEN "--"
          WHEN "10" THEN "--"
        END AS secificity_type,
        specificity, 
        (SELECT c.designation
           FROM (SELECT CASE cd.device_type
                          WHEN "2" THEN "glpi_device_processor"
                          WHEN "3" THEN "glpi_device_ram"
                          WHEN "4" THEN "glpi_device_hdd"
                          WHEN "5" THEN "glpi_device_iface"
                          WHEN "6" THEN "glpi_device_drive"
                          WHEN "8" THEN "glpi_device_gfxcard"
                          WHEN "9" THEN "glpi_device_sndcard"
                          WHEN "10" THEN "glpi_device_pci"
                        END
                   FROM glpi_computer_device cd 
                  WHERE cd.ID = ID ) AS c
          WHERE c.ID=FK_device)
  FROM `glpi_computer_device` 
 WHERE FK_computers = 1
  • 0
    Могу ли я указать, что, как правило, все эти WHEN "1" THEN "Casing" являются просто плохим стилем кода? Вы не должны заставлять базу данных возвращать весь необходимый вам текст или даже текстовые строки. Ваша заявка должна сделать это
Теги:
subquery

1 ответ

0

нет, что не работает. вы должны структурировать это как UNION из всех 8 таблиц - затем оберните это с помощью другого оператора select, чтобы получить значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню