Tengo un conjunto de tablas que lógicamente son una tabla dividida en partes por motivos de rendimiento. Necesito escribir una consulta que combine efectivamente todas las tablas, así que utilizo una sola cláusula where del resultado. He utilizado con éxito una UNION en el resultado del uso de la cláusula WHERE en cada subtabla de forma explícita como en el siguiente¿Cómo puedo tratar una consulta UNION como una consulta secundaria?
SELECT * FROM FRED_1 WHERE CHARLIE = 42
UNION
SELECT * FROM FRED_2 WHERE CHARLIE = 42
UNION
SELECT * FROM FRED_3 WHERE CHARLIE = 42
pero como hay diez sub-tablas separadas actualización de la cláusula WHERE cada vez es doloroso. Lo que quiero es algo como esto
SELECT *
FROM (
SELECT * FROM FRED_1
UNION
SELECT * FROM FRED_2
UNION
SELECT * FROM FRED_3)
WHERE CHARLIE = 42
Si se hace una diferencia la consulta necesita para funcionar contra una base de datos DB2.
Aquí hay una versión más completa (desinfectada) de lo que tengo que hacer.
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
NUEVA INFORMACIÓN:
Parece que el problema tiene más que ver con el número de campos en la unión que cualquier otra cosa. Si restrinjo mucho los campos, puedo obtener la mayoría de las variaciones de sintaxis que están por debajo. Desafortunadamente, restringir tanto los campos significa que la consulta resultante, aunque potencialmente útil, no me da el resultado que quería. Logré obtener 3 campos adicionales de una de las tablas además de las 2 claves. Más que eso y la consulta falla.
¿Eso sintaxis producir un error? Si usa UNION ALL en lugar de UNION, podría funcionar bien. Luego pones los sindicatos a la vista y has reinventado la partición ... – araqnid
¿Te das cuenta de que esta estrategia de "dividir la mesa" es una técnica de pesimismo identificada? – dkretz
De hecho, tuve que buscar lo que significaba pesimismo :-) Habiendo dicho eso, la idea de dividir la tabla es parte de una aplicación de unos 10 años de antigüedad, así que no puedo hacer mucho al respecto. –