Cita:
Iniciado por pixonjr Vale, pero las tablas que yo quiero buscar no tienen el mismo numero de columnas, ni las columnas son las mismas, etc.
¿Entonces que? No me creo que no haya ninguna forma de hacer este procedimiento, sin ser obligatoriamente las tablas con el mismo nº de columnas, los mismos datos y buscar las mismas columnas, etc.
Un saludo y gracias.
Manual de MySQL: Cita: UNION se usa para combinar el resultado de un número de comandos SELECT en un conjunto de resultados.
Las columnas seleccionadas lisatadas en posiciones correspondientes de cada comando SELECT deben tener el mismo tipo. (Por ejemplo, la primera columna seleccionada por el primer comando debe tener el mismo tipo que la primer columna seleccionada por otros comandos.) Los nombres de columna usados por el primer comando SELECT se usan como nombres de columna para los resultados retornados.
Manual de Oracle:
Cita: The corresponding expressions in the select lists of the component queries of a compound query must match in number and must be in the same data type group (such as numeric or character).
Manual de SQL Server:
Cita: Combina los resultados de dos o más consultas en un solo conjunto de resultados que incluye todas las filas que pertenecen a las consultas de la unión. La operación UNION es distinta de la utilización de combinaciones de columnas de dos tablas.
A continuación se muestran las reglas básicas para combinar los conjuntos de resultados de dos consultas con UNION:
El número y el orden de las columnas debe ser el mismo en todas las consultas.
Los tipos de datos deben ser compatibles.
Puedo seguir, pero con eso creo que queda claro: Es una restricción de la cláusula en
todos los sistemas de bases de datos.
Lo que suele hacerse ocasionalmente es crear columnas ficticias para devolver esas mismas columnas en las tablas que no las tienen, con datos nulos o vacíos,
pero para eso es necesario saber cuáles son las tablas, y qué columnas hay que fabricar en cada caso.
Código SQL:
Ver originalSELECT a, b, c, d, 0 e
FROM tabla1
UNION
SELECT a, DATE('0000-00-00') b, c, d, e
FROM tabla2
UNION
SELECT a, DATE('0000-00-00') b, 0.0 c, NULL d, e
FROM tabla2
En este ejemplo, la columna "E" es numérica de enteros, la "B" es de fecha, la "C" es de decimales y la D no especificada, pero puede ser de caracteres.
¿Se entiende?
No le des vueltas al asunto. No estás tratando con PHP en este caso sino con SQL, que tiene sus propias reglas, sus exigencias y restricciones, y por sobre todo, es un lenguaje imperativo y concreto, que trabaja con cosas concretas (datos). No trabaja con supuestos.