Как я могу рассматривать запрос UNION как подзапрос

У меня есть набор таблиц, которые логически представляют собой одну таблицу, разделенную на части по соображениям производительности. Мне нужно написать запрос, который эффективно объединяет все таблицы вместе, поэтому я использую одно предложение 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 ключам. Если больше, запрос не будет выполнен.

9
задан Michael Rutherfurd 12 March 2011 в 00:30
поделиться