У меня есть набор таблиц, которые логически разделены на части по соображениям производительности. Мне нужно написать запрос, который эффективно объединяет все таблицы вместе, поэтому я использую одно предложение where для результата. Я успешно использовал UNION в результате использования предложения WHERE для каждой подтаблицы явно, как в следующем
SELECT * FROM FRED_1 WHERE CHARLIE = 42
UNION
SELECT * FROM FRED_2 WHERE CHARLIE = 42
UNION
SELECT * FROM FRED_3 WHERE CHARLIE = 42
но поскольку есть десять отдельных подтаблиц, обновление предложения WHERE каждый раз является проблемой. Я хочу что-то вроде этого
SELECT *
FROM (
SELECT * FROM FRED_1
UNION
SELECT * FROM FRED_2
UNION
SELECT * FROM FRED_3)
WHERE CHARLIE = 42
Если это имеет значение, запрос должен выполняться к базе данных DB2.
Вот более полная (продезинфицированная) версия того, что мне нужно сделать.
select *
from ( select * from FRD_1 union select * from FRD_2 union select * from FRD_3 ) as FRD,
( select * from REQ_1 union select * from REQ_2 union select * from REQ_3 ) as REQ,
( select * from RES_1 union select * from RES_2 union select * from RES_3 ) as RES
where FRD.KEY1 = 123456
and FRD.KEY1 = REQ.KEY1
and FRD.KEY1 = RES.KEY1
and REQ.KEY2 = RES.KEY2
НОВАЯ ИНФОРМАЦИЯ:
Похоже, что проблема больше связана с количеством полей в объединении, чем с чем-либо еще. Если я сильно ограничу поля, я смогу получить большинство из приведенных ниже вариантов синтаксиса. К сожалению, такое ограничение полей означает, что полученный запрос, хотя и потенциально полезный, не дает мне желаемого результата. Мне удалось получить дополнительные 3 поля из одной из таблиц в дополнение к 2 ключам. Более того, запрос не выполняется.