SQL - Ayuda con una consulta SQL por favor. Union desde una misma tabla

   
Vista:
Imágen de perfil de Jesus Alberto

Ayuda con una consulta SQL por favor. Union desde una misma tabla

Publicado por Jesus Alberto (7 intervenciones) el 27/07/2016 20:40:20
Tengo una tabla llamada entidad, donde se registran datos de catálogos.
Mi problema es que quiero hacer un join entre datos de la misma tabla. Me explico.
Mi tabla ENTIDAD tiene estos campos:
id_entidad, nombre, descripcion, id_catalogo

En la tabla CATALOGO tengo registrado dos catalogos que guardar, por ejemplo, galletas. La diferencia es que (por la manera en que está hecha la estructura de la tabla) un catalogo muestra el nombre del empaque y el otro muestra el sabor, ambas comparten en común el tipó de galleta (campo descripcion en el catalogo 1 y campo nombre en el catalogo 2) desde ahí quiero hacerles la unión pero no sé cómo hacerlo desde la misma tabla.

Les pongo un ejemplo de lo que tengo y lo que quiero obtener:
CATALOGO id = 1
Lo registrado en ENTIDAD:
CAMPOS: id_entidad, nombre, descripción, id_catalogo
REGISTROS:
1, marias, galletas, 1
2, maravillas, galletin, 1
3, marinadas, galletota, 1
4, marianas, galletanas, 1
5, sabrosinas, galles, 1

CATALOGO id = 2
Lo registrado en ENTIDAD:
CAMPOS: id_entidad, nombre, descripción, id_catalogo
REGISTROS:
6, galletas, chocolate, 2
7, galletin, vainilla, 2
8, galletanas, fresa, 2


El resultado que quiero es el siguiente:
CAMPOS: nombre, nombreEmpaque, sabor
Registros:
galletas, marias, chocolate
galletin, maravillas, vainilla
galletanas, marianas, fresa

Nótese que no quiero que me muestra ni las "galles" ni las "galletota" porque no tienen un sabor registrado.

Muchas gracias, comunidad!
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

Ayuda con una consulta SQL por favor. Union desde una misma tabla

Publicado por leonardo_josue (880 intervenciones) el 27/07/2016 23:29:42
Hola Jesús Alberto:

Si vale la pena el comentario, habría que comenzar por decir que tienes un terrible diseño de tablas... estás mezclando naranjas con manzanas y esperas obtener como resultado durazno... Si te es posible modificar tu diseño, entonces separa la información de tu tabla, manéjalo como dos tablas independientes y evítate dolores de cabeza futuros.

Ahora bien, como es posible que modificar tu modelo de datos no esté en tus manos, entonces la solución es "simular" tablas independientes mediante subconsultas y hacer el JOIN... sería más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
    T1.descripcion, T1.nombre, T2.descripcion
FROM
( SELECT
      nombre, descripcion
   FROM ENTIDAD
   WHERE
       id_catalogo = 1 ) T1
INNER JOIN
( SELECT
      nombre, descripcion
  FROM ENTIDAD
  WHERE
      id_catalogo = 2) T2
ON T1.descripcion = T2.nombre;

El Truco está en que las tablas T1 y T2 se obtienen como subconsultas, la primera para obtener sólo los registros con id_catalogo = 1 y la segunda para obtener los registros con id_catalogo=2... El resto es simplemente hacer un JOIN entre ambas tablas.

Este tipo de consultas suele tener un pésimo rendimiento, por lo que no es recomendable, por lo que vuelvo a insistir con lo que puse en el primer párrafo, si puedes cambiar tu modelo HAZLO... y la pereza no es una razón válida para no hacerlo.

Haz la prueba y nos comentas.

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
Imágen de perfil de Jesus Alberto

Ayuda con una consulta SQL por favor. Union desde una misma tabla

Publicado por Jesus Alberto (7 intervenciones) el 28/07/2016 03:52:05
Wow, excelente respuesta. La estructura de la base de datos no la hice yo, así está en la empresa xD!

Muchísimas gracias!
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

Ayuda con una consulta SQL por favor. Union desde una misma tabla

Publicado por GonzaloGC (21 intervenciones) el 29/07/2016 22:31:36
Bueno, ese es el tipo de respuesta que impide cualquier ayuda o solución.
Lo que deberías hacer en ese caso es plantearle a las personas con capacidad de decisión en esa empresa que es necesaria una reingeniería mínima de la base para que los resultados de las consultas sean al menos EXACTOS.
Lo que hay que hacerles entender es que si tienes una base de datos mal estructurada, las consulta sólo pueden dar como resultado datos basura.

Si no lo entienden, ya no es tu responsabilidad.
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