У меня есть следующие таблицы:
Licenses
:
License | object_type_id | selected_object_type_id
L1 1 300
L4 2 300
L5 3 127
.. .. ...
object_type
id | type |
1 Main
2 Sub
3 Feature
Main
id | product | ....
1 PMA
2 PMB
3 PMC
... ...
300 PMZZ
Sub
id | product | ...
1 PSA1
2 PSA2
3 ...
300 PSAZZ
Feature
id | Feature| ...
1 FO1
2 FO2
3 FO3
.. ..
127 FFZ127
Я хочу иметь финальную таблицу с именем "license_mapping"
license_mapping
license | license_object | license_object_type
L1 PMZZ Main
L4 PSAZZ Sub
L5 FFZ127 Feature
В логе c указывается, что для данной лицензии найдите licenses.object_type_id
. В зависимости от значения object_type.type
, где licenses.object_type_id = object_type.id
выберите продукт или функцию из соответствующей таблицы, которая соответствует licenses.selected_object_type_id
.
Но как мне обращаться с кейсами Main
и Sub
, поскольку они имеют с тем же идентификатором, а также с тем же именем столбца?
Если я напишу псевдо SQL заявление, это будет следующим: последняя строка, где я не понимаю, как это сделать правильно.
SELECT
L.License,
CASE WHEN OT.type = 'Main' THEN M.Product WHEN OT.type = 'Sub' THEN S.Product WHEN OT.Type = 'Feature' THEN F.Feature END AS License_Objects,
OT.type As license_object_type
FROM
Licenses L
JOIN object_type OT on L.object_type_id = OT.id
JOIN Feature F on L.object_type_id = F.id
JOIN Main M when OT.type = 'Main' and Sub S when OT.type = 'Sub'