MySQL - Obtener nombre tabla de SUBconsulta

 
Vista:
sin imagen de perfil

Obtener nombre tabla de SUBconsulta

Publicado por Pablo (2 intervenciones) el 10/06/2015 00:21:00
Hola compañeros
tengo una gran duda que me podría sacar de un muy gran apuro

tenéis idea si es posible averiguar el nombre de una tabla de una subconsulta?

Ejemplo:
1
SELECT nom_table FROM (SELECT * FROM city)

esto debería de devolverme una columna con el resultado "city"

Agradezco de antemano cualquier tipo de respuesta!
Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Obtener nombre tabla de SUBconsulta

Publicado por xve (1151 intervenciones) el 10/06/2015 07:43:36
Hola Pablo, no entiendo muy bien lo que quieres hacer, pero esa consulta esta mal, no?

Tendria que ser algo como:
1
SELECT campo FROM (SELECT * FROM city)

Si nos puedes comentar...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Obtener nombre tabla de SUBconsulta

Publicado por leonardo_josue (414 intervenciones) el 10/06/2015 22:06:30
Hola Pablo:

1
tenéis idea si es posible averiguar el nombre de una tabla de una subconsulta?

Esto no es posible. El nombre de la tabla, no es un dato que contenga la subconsulta como tal, en todo caso es un METADATO de la misma base de datos... SQL sólo trabaja con los datos almacenados en las tablas, y en este caso el NOMBRE DE LA TABLA no lo almacenas en la tabla misma...

no sé muy bien para qué te serviría esto que quieres... quizás si nos explicas el contexto en el que piensas utilizar esta subconsulta sería posible indicarte algún otro camino. Sería conveniente que también nos comentaras qué BD's estás utilizando.

Por lo pronto, lo único que podrías hacer sería agregar un atributo "constante" en la subconsulta con el nombre de la tabla, es decir, algo como esto:

1
SELECT nom_table FROM (SELECT city.*, 'city' nom_table FROM city)

pero esto es una manera bastante "tramposa" de obtener lo que quisieras, ya que aquí la constante la tendrías que poner manualmente.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Obtener nombre tabla de SUBconsulta

Publicado por Pablo (2 intervenciones) el 11/06/2015 00:15:24
Si, es bastante sencillo, estoy automatizando un sistema de datos y quiero hacerlo lo pasando el minimo de datos posibles, i me gustaria poder pasarle la SELECT a una funcion q me pinta los datos y luego me gustaria poder sacar la tabla de esa select para así hacer el delete o insert correspondiente
esa era mi idea
Gracias por tu información
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Obtener nombre tabla de SUBconsulta

Publicado por leonardo_josue (414 intervenciones) el 11/06/2015 16:12:50
Entiendo lo que quieres hacer, pero estás enfocando mal las cosas.

En todo caso es más simple que envíes a una función el nombre de la tabla y la función te regrese el SELECT, UPDATE o DELETE correspondiente.

Con el nombre de tu tabla, puedes acceder a los metadatos y recuperar sus campos por ejemplo, tengo una BD's que se llama PRUEBAS, con este query puedo obtener el nombre de todas las tablas que contiene esa bd's:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mysql> SELECT table_name
    -> FROM INFORMATION_SCHEMA.tables
    -> WHERE table_schema = 'pruebas';
+---------------------+
| table_name          |
+---------------------+
| alumno              |
| clientes            |
| cultivo             |
| documentos          |
| empleados           |
| equipos             |
| examenes            |
| imb_reportepaciente |
| jugadores           |
| marcas              |
| matricula           |
| modelos             |
| occurring_value     |
| pedidos             |
| reclamos            |
| respuestas          |
| select              |
| tabla               |
| tabla1              |
| tabla2              |
+---------------------+
20 rows in set (0.00 sec)

Ahora, supongamos que quiero saber qué campos tiene la tabla "TABLA" para poder armar un INSERT o un UPDATE "dinámico", podría hacer algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT column_name, column_type
    -> FROM INFORMATION_SCHEMA.columns
    -> INNER JOIN INFORMATION_SCHEMA.tables ON
    ->    INFORMATION_SCHEMA.columns.table_schema = INFORMATION_SCHEMA.tables.table_schema AND
    ->    INFORMATION_SCHEMA.columns.table_name =  INFORMATION_SCHEMA.tables.table_name
    -> WHERE INFORMATION_SCHEMA.tables.table_schema = 'pruebas' AND
    ->       INFORMATION_SCHEMA.tables.table_name = 'tabla';
+---------------+-------------+
| column_name   | column_type |
+---------------+-------------+
| id_aplicativo | int(11)     |
| vc_nombre     | varchar(2)  |
| incidencias   | varchar(1)  |
+---------------+-------------+
3 rows in set (0.09 sec)

si armas una función a la que le envies como parámetro el nombre de tu BD's así como el nombre de tu tabla, entonces podrías armar de manera "dinámica" el SELECT, INSERT, DELETE o UPDATE que esté asociado a esa tabla, espero que se entienda.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar