Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Juntar varias consultas que usan JOIN

Estas en el tema de Juntar varias consultas que usan JOIN en el foro de Mysql en Foros del Web. Buenas! Ando un poco oxidado de mysql, a ver si me podéis ayudar: tengo varias tablas, a saber: Código: element: id_element (int, pk, ai) id_kind ...
  #1 (permalink)  
Antiguo 10/01/2013, 05:30
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 8 meses
Puntos: 33
Juntar varias consultas que usan JOIN

Buenas!

Ando un poco oxidado de mysql, a ver si me podéis ayudar:

tengo varias tablas, a saber:

Código:
element:

id_element (int, pk, ai)
id_kind (int)
id_attribute (int)
id_text (int)

kind: 

id_kind (int, pk, ai) -> campo de unión para element - kind
name (varchar)
close (int)

attribute:

id_attrubute (int, pk ) -> campo de unión para element - attribute)
key (varchar, pk)
value (varchar)

text:

id_text (int, pk, ai) -> campo de unión para element - text
id_lan (int)
word (varchar)
Entonces, tengo varios SQL con join, como por ejemplo:

Código MySQL:
Ver original
  1. select e.id_element, a.key, a.value
  2.  from attribute a
  3.  inner join element e
  4.  on e.id_attribute = a.id_attribute
  5.  and e.id_attribute in (select id_attribute
  6.                       from element e
  7.                       inner join pattern p
  8.                       on p.element = e.id_element and
  9.                       p.id_pattern = 'test');
  10.  
  11. -- nos da el id_element, todas sus key y sus values.

o otro:

Código MySQL:
Ver original
  1. select e.id_element, w.word
  2. from wordbench w
  3. inner join element e
  4. on e.id_text = w.id_wordbench and
  5. w.id_lan = 0 and
  6. e.id_attribute in (select id_attribute
  7.                     from element e
  8.                     inner join pattern p
  9.                     on p.element = e.id_element and
  10.                     p.id_pattern = 'test');
  11.  
  12. -- nos da el id_element y sus word.

y otras varias del mismo estilo.

Lo que yo quería hacer (si se puede) es obtener en una misma query algo como:

Código:
id_element, kind.name, attribute.key, attribute.value, text.word
filtrando para todos aquellos id_attribute que haya en la tabla pattern cuyo id_pattern sea el que yo especifique (es decir, aplicando al final el in (select id_attribute...)

¿Se puede hacer, o tendré que hacer 4 querys separadas?

Gracias!
  #2 (permalink)  
Antiguo 10/01/2013, 09:41
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Juntar varias consultas que usan JOIN

Hola DoHITB:

tienes que recordar que tú puedes hacer todos los INNER JOIN'S que necesites, incluso puedes utilizar un INNER JOIN para evitar el IN, ya que esta sentencia es una de las más ineficientes... prueba así:

Código MySQL:
Ver original
  1.   e.id_element, k.name, a.key, a.value, t.word
  2.   element e
  3. INNER JOIN kind k ON e.id_kind = k.id_kind
  4. INNER JOIN attribute e ON e.id_attribute = a.id_attribute
  5. INNER JOIN texto t ON e.id_text = t.id_text
  6. INNER JOIN pattern p ON e.id_element = p.element
  7.   p.id_pattern = 'test'

Saludos
Leo.
  #3 (permalink)  
Antiguo 10/01/2013, 12:31
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 8 meses
Puntos: 33
Respuesta: Juntar varias consultas que usan JOIN

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola DoHITB:

tienes que recordar que tú puedes hacer todos los INNER JOIN'S que necesites, incluso puedes utilizar un INNER JOIN para evitar el IN, ya que esta sentencia es una de las más ineficientes... prueba así:

Código MySQL:
Ver original
  1.   e.id_element, k.name, a.key, a.value, t.word
  2.   element e
  3. INNER JOIN kind k ON e.id_kind = k.id_kind
  4. INNER JOIN attribute e ON e.id_attribute = a.id_attribute
  5. INNER JOIN texto t ON e.id_text = t.id_text
  6. INNER JOIN pattern p ON e.id_element = p.element
  7.   p.id_pattern = 'test'

Saludos
Leo.
Vale, entonces digamos (si no recuerdo mal) que un inner join equivale a igualar los campos de relación de una tabla, ¿no?

Gracias!
  #4 (permalink)  
Antiguo 10/01/2013, 13:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Juntar varias consultas que usan JOIN

Hola de nuevo DoHITB:

Creo que es conveniente que desempolves tus apuntes de base de datos o que le des un vistazo a la teoría... por lo pronto te dejo esta liga de Santa Wikipedia, que a mi parecer explica muy bien cómo funcionan los distintos tipos de JOIN's.

http://es.wikipedia.org/wiki/Join

Esta es la teoría general... pero no debes olvidar que MySQL no implementa todos los tipos de JOIN's (como por ejemplo el FULL OUTER JOIN... dale también un vistazo a la documentación oficial para ver cuáles son los que puedes utilizar:

http://dev.mysql.com/doc/refman/5.0/es/join.html

Saludos
Leo.

Etiquetas: join, juntar, select, sql, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:29.