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

UNION de 2 consultas, pasarlo a una sola consulta

Estas en el tema de UNION de 2 consultas, pasarlo a una sola consulta en el foro de Mysql en Foros del Web. Hola. Tengo la siguiente consulta, que funciona correctamente, pero el caso es que necesitaría hacerlo todo dentro de un solo SELECT (si es posible), ya ...
  #1 (permalink)  
Antiguo 26/01/2010, 04:19
 
Fecha de Ingreso: diciembre-2007
Mensajes: 16
Antigüedad: 16 años, 4 meses
Puntos: 0
UNION de 2 consultas, pasarlo a una sola consulta

Hola.

Tengo la siguiente consulta, que funciona correctamente, pero el caso es que necesitaría hacerlo todo dentro de un solo SELECT (si es posible), ya que tengo un documento php que luego trabaja sobre el texto de esta consulta y si encuentra dos SELECTs en la misma consulta no funciona correctamente.

(SELECT Id_microrrelato, Titulo, Texto, Idioma, Fecha
FROM microrrelato INNER JOIN bachillerato ON microrrelato.Id_alu=bachillerato.Identificacion
WHERE microrrelato.Idioma='Castellano')
UNION
(SELECT Id_microrrelato, Titulo, Texto, Idioma, Fecha
FROM microrrelato INNER JOIN ciclo ON microrrelato.Id_alu=ciclo.Identificacion
WHERE microrrelato.Idioma='Castellano')
ORDER BY Id_microrrelato DESC


Había pensado algo como esto, pero no me devuelve ninguna fila.

SELECT Id_microrrelato, Titulo, Texto, Idioma, Fecha
FROM microrrelato
RIGHT JOIN (
bachillerato, ciclo
) ON ( microrrelato.Id_alu = bachillerato.Identificacion
OR microrrelato.Id_alu = ciclo.Identificacion )
WHERE microrrelato.Idioma = 'Castellano'
ORDER BY Id_microrrelato DESC


Si existe alguna forma de hacerlo todo en dentro de un solo SELECT, agradecería mucho que me pudiesen ayudar.

Gracias.
  #2 (permalink)  
Antiguo 26/01/2010, 04:30
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: UNION de 2 consultas, pasarlo a una sola consulta

En vez de hacernos decodificar todo eso, seria mejor si nos pones que tablas y campos tienes y que consulta quieres conseguir, asi te vamos a poder ayudar mejor creo yo
  #3 (permalink)  
Antiguo 26/01/2010, 04:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: UNION de 2 consultas, pasarlo a una sola consulta

¿No te sirve esto?
SELECT Id_microrrelato, Titulo, Texto, Idioma, Fecha
FROM microrrelato INNER JOIN bachillerato ON microrrelato.Id_alu=bachillerato.Identificacion
INNER JOIN ciclo ON microrrelato.Id_alu=ciclo.Identificacion
WHERE microrrelato.Idioma='Castellano' ORDER BY Id_microrrelato DESC

Lo que no veo clara es la relación enre ciclo y microrrelato, concretamente la relación mediante Id_alu e identificacion de ciclo. Dinos cuál es la estructura de las tablas y la naturaleza de estos datos con algún ejemplo.
  #4 (permalink)  
Antiguo 28/01/2010, 05:08
 
Fecha de Ingreso: diciembre-2007
Mensajes: 16
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: UNION de 2 consultas, pasarlo a una sola consulta

Tengo las siguientes tablas:

- microrrelato
1er ejemplo:
Id_microrrelato: 1 (Clave Primaria)
Título: El Sol
Texto: Érase una vez...
Idioma: Castellano
Fecha: 17/01/2010
Id_alu: 73829935F (Clave externa tabla alumno)

2º ejemplo:
Id_microrrelato: 2 (Clave Primaria)
Título: La luna
Texto: Érase otra vez...
Idioma: Castellano
Fecha: 23/01/2010
Id_alu: 23847771V (Clave externa tabla alumno)


- alumno
1er ejemplo:
Idenficacion: 73829935F (Clave Primaria)
...Otros datos personales

2º ejemplo:
Idenficacion: 23847771V (Clave Primaria)
...Otros datos personales


- ciclo
Identificacion: 73829935F (Clave externa tabla alumno) (Clave Primaria)
Id_Inst: 1243 (Clave externa tabla instituto)


- bachillerato
Identificacion: 23847771V (Clave externa tabla alumno) (Clave Primaria)
Id_Inst: 1021 (Clave externa tabla instituto)


- instituto
1er ejemplo:
Id_Inst: 1243 (Clave Primaria)
Nombre: Instituto Cabreras

2º ejemplo:
Id_Inst: 1243 (Clave Primaria)
Nombre: Instituto Virgen del Carmen
  #5 (permalink)  
Antiguo 28/01/2010, 06:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: UNION de 2 consultas, pasarlo a una sola consulta

gotito,
todo parece estar bien, incluso tu consulta primera, la adecuada para lo que buscas, excepto la fecha, pues tienes un formato que me hace sospechar que no usas un campo DATE. Debes usar un campo para fecha, y no un campo de tipo varchar. Para un campo fecha debes insertar la fecha con el formato yyyy-mm-dd, por ej. 2009-07-25. Luego podrás trabajar con ella y extraer los datos como quieras, por meses, buscando por rango de fechas, etc.
Parecen también faltarte otros inner join en cada parte del union para unir con la tabla alumno y poder traerte nombre y apellidos y datos personales, y añadir la cadena que indique si se trata de ciclo o bachillerato, y el instituto porque imagino que quieres esos datos. He puesto en los dos SELECT los campos alumno.nombre y alumno.apellidos. Pon tú en su lugar los nombres que hayas dado.

Código SQL:
Ver original
  1. (SELECT
  2.  Id_microrrelato, Titulo, Texto, Idioma, Fecha, 'bachillerato' grupo, alumno.nombre, alumno.apellidos, instituto.nombre
  3. FROM microrrelato
  4.  INNER JOIN alumno
  5.    ON microrrelato.Id_alu=alumno.Identificacion
  6.  INNER JOIN bachillerato
  7.    ON microrrelato.Id_alu=bachillerato.Identificacion
  8.  INNER JOIN instituto
  9.    ON bachillerato.Id_inst = instituto.Id_inst
  10.     WHERE microrrelato.Idioma='Castellano')
  11. UNION ALL
  12. (SELECT
  13.  Id_microrrelato, Titulo, Texto, Idioma, Fecha, 'ciclo', alumno.nombre, alumno.apellidos, instituto.nombre
  14. FROM microrrelato
  15.  INNER JOIN alumno
  16.    ON microrrelato.Id_alu=alumno.Identificacion
  17.  INNER JOIN ciclo
  18.    ON microrrelato.Id_alu=ciclo.Identificacion
  19.  INNER JOIN instituto
  20.    ON ciclo.Id_inst = instituto.Id_inst
  21.   WHERE microrrelato.Idioma='Castellano')
  22. ORDER BY Id_microrrelato DESC

Esto es lo que debes usar. Pruébalo directamente en consola o en phpmyadmin. Si funciona, y luego en PHP no, debes pedir ayuda en el foro PHP.

Última edición por jurena; 28/01/2010 a las 06:23
  #6 (permalink)  
Antiguo 28/01/2010, 07:08
 
Fecha de Ingreso: diciembre-2007
Mensajes: 16
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: UNION de 2 consultas, pasarlo a una sola consulta

La consulta que puse sí que me funciona, y de la forma que quiero. Pero luego tengo un problema al hacer una operación en PHP.

Lo que quiero saber es si es posible transformar mi consulta de manera que haya un único SELECT.
  #7 (permalink)  
Antiguo 28/01/2010, 08:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: UNION de 2 consultas, pasarlo a una sola consulta

Los campos de arriba son los que predominan en la consulta. Por lo que en php se debe llamar los campos de la primera consulta o sus respectivos alias.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: union
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:57.