Tenemos algunas tablas heredadas con una estructura muy similar. Estas tablas se mantuvieron separadas porque el formato de la misma información era ligeramente diferente, dependiendo de la fuente de donde se extrajo la información [no dispare al heredero del esquema;)]. Hemos estado usando UNION en nuestras consultas.
Por ejemplo:
SELECT a, b, c, FROM Table_1 WHERE … UNION SELECT a, b, c, FROM Table_2 WHERE … UNION SELECT a, b, c, FROM Table_3 WHERE …Este arreglo confuso ha estado funcionando, pero nos gustaría saber de qué tabla proviene una parte de la información en nuestra salida. ¿Hay alguna manera de darse cuenta de eso?
Simplemente agregue una columna a cada subconsulta que contenga el nombre de la tabla:
SELECT 'Table_1' tablename, a, b, c, FROM Table_1 WHERE ... UNION ALL SELECT 'Table_2', a, b, c, FROM Table_2 WHERE ... UNION ALL SELECT 'Table_3', a, b, c, FROM Table_3 WHERE ... Tenga en cuenta que cambié UNION s a UNION ALL s, ya que agregar esta columna básicamente anula la funcionalidad de deduplicación que proporciona UNION .
Tu puedes hacer:
SELECT 'Table_1' as source, a, b, c, FROM Table_1 WHERE … UNION ALL SELECT 'Table_2', a, b, c, FROM Table_2 WHERE … UNION ALL SELECT 'Table_3', a, b, c, FROM Table_3 WHERE … Y no olvide usar UNION ALL en lugar de UNION . Tiene un mejor rendimiento y no elimina filas.