У меня есть довольно сложный запрос к таблице A, где JOIN
делается для других таблиц B и C (и даже больше).
Мне бы хотелось, чтобы для определенного значения поля в таблице A поля добавлялись к SELECT
, но также к другим соединениям.
Я знаю, что я могу динамически добавлять столбцы с помощью CASE
, но проверенное значение всегда одинаково, и я бы хотел избежать повторения CASE
для каждого поля, поскольку существует много полей. (Для ясности я назвал таблицы "B" и "D" в CASE
, но в реальной ситуации это может быть то же самое с псевдонимом соединения)
SELECT
CASE
WHEN A.a1=1 THEN B.b1
WHEN A.a1=2 THEN D.d1
END AS a2,
CASE
WHEN A.a1=1 THEN B.b2
WHEN A.a1=2 THEN D.d2
END AS a3,
CASE
WHEN A.a1=1 THEN B.b2
WHEN A.a1=2 THEN D.d2
END AS a3,
//... many others on different tables but always on the same condition
FROM A
JOIN //?? if first condition join on B and C else on D and E
Есть ли решение для динамического присоединения и избежания такого длительного повторения вызовов CASE
?
ПРИМЕЧАНИЕ: это только часть запроса, построенного с кодом, что затрудняет использование UNION
, так как поля добавляются в другом месте, и будет трудно сопоставить то же количество выбранных полей.