Выбор таблицы с помощью предложения case в предложении from - PullRequest
0 голосов
/ 30 августа 2010

У меня есть 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

1 Ответ

0 голосов
/ 27 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...