Tengo una tabla que contiene un campo que cuando le agregamos una letra se convierte en un nombre de tabla, hasta ahora solo puedo buscar todo de la primera tabla y luego hacer cada table_name a la vez. Así que estoy buscando una forma de todo lo anterior en una consulta.

Consultas

select table_name from main
select date,data from X$table_name order by date desc limit 1

Principal

table_name      name 
000001          X1
000002          X2
000003          X3
000004          X4
000005          X5

Tabla X000001

id  date        data
5   2016-12-05  data_02_05
4   2016-12-04  data_02_04
3   2016-12-03  data_02_03
2   2016-12-02  data_02_02
1   2016-12-01  data_02_01

Tabla X000002

id  date        data
5   2016-12-05  data_02_05
4   2016-12-04  data_02_04
3   2016-12-03  data_02_03
2   2016-12-02  data_02_02
1   2016-12-01  data_02_01

Resultado esperado

table_name      date            data
000001          2016-12-05      data_01_05
000002          2016-12-05      data_02_05
000003          2016-12-05      data_03_05
000004          2016-12-05      data_04_05
000005          2016-12-05      data_05_05
0
0x58 5 dic. 2016 a las 17:20

1 respuesta

La mejor respuesta

Necesita utilizar una consulta dinámica o una declaración preparada para ese propósito.

declare @tab_name varchar(100);
set @tab_name := (select table_name from main);
SET @t1 := CONCAT("select `date`,data from X",@tab_name,"  order by `date` desc limit 1");
 PREPARE stmt3 FROM @t1;
 EXECUTE stmt3;
 DEALLOCATE PREPARE stmt3;
1
Rahul 5 dic. 2016 a las 17:29
¿Funciona esto en mysql? dio un error al declarar, así que lo cambió para seleccionar @table_name pero no muestra nada.
 – 
0x58
5 dic. 2016 a las 20:28
1
@ 0x58, sí, pero lo tendrá que envolver en un bloque begin..end dentro de un procedimiento almacenado
 – 
Rahul
5 dic. 2016 a las 21:17
Me las arreglé para hacer lo que dijiste, pero sigo recibiendo este error CALL falló: (1242) La subconsulta devuelve más de 1 fila para la línea seleccione @tab_name: = (seleccione table_name from main); solo funciona cuando agrego el límite 1
 – 
0x58
6 dic. 2016 a las 20:42
@ 0x58, ¿no debería ser así? debería ser ya que está seleccionando ese valor de columna y así se devolverán todos. Además, es una pregunta separada y publíquela por separado. explicando lo que está tratando de lograr.
 – 
Rahul
6 dic. 2016 a las 21:15
He escrito una clase para MySQL PS ... github.com/DennisWeidmann/SQLContentProvider
 – 
Dennis Weidmann
13 dic. 2016 a las 01:56