У меня есть 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
нет, что не работает. вы должны структурировать это как UNION из всех 8 таблиц - затем оберните это с помощью другого оператора select, чтобы получить значение.
WHEN "1" THEN "Casing"
являются просто плохим стилем кода? Вы не должны заставлять базу данных возвращать весь необходимый вам текст или даже текстовые строки. Ваша заявка должна сделать это