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

Combinar o unir dos selects para una consulta en particular

Estas en el tema de Combinar o unir dos selects para una consulta en particular en el foro de Mysql en Foros del Web. Hola! Tengo la siguiente tabla fija (no inserts) col1 col2 0 -| 18 1 -| 18 2 -| 18 0 -| 19 1 -| 19 ...
  #1 (permalink)  
Antiguo 13/07/2012, 11:37
 
Fecha de Ingreso: marzo-2010
Ubicación: df
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 5
Información Combinar o unir dos selects para una consulta en particular

Hola!

Tengo la siguiente tabla fija (no inserts)

col1 col2
0 -| 18
1 -| 18
2 -| 18
0 -| 19
1 -| 19
2 -| 19
0 -| 20
0 -| 21

Si lastCheck = 18 y id = 2 yo quiero el siguiente conjunto de resultados:

col1 col2
2 -| 18
0 -| 19
1 -| 19
2 -| 19
0 -| 20
0 -| 21

Esto lo puedo realizar en dos consultas:

select * from TABLA where col2 = lastCheck and col1 > id;
select * from TABLA where col2 > lastCheck;

A mi me gustaría unir estas dos consultas en una sola.
__________________
Dead Nation
  #2 (permalink)  
Antiguo 13/07/2012, 11:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Combinar o unir dos selects para una consulta en particular

Prueba así:
Código MySQL:
Ver original
  1. SELECT DISTINCT id, col2
  2. FROM TABLA
  3.     (col2 = lastCheck AND col1 > id)
  4.     XOR
  5.     (col2 > lastCheck);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/07/2012, 11:58
 
Fecha de Ingreso: marzo-2010
Ubicación: df
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Combinar o unir dos selects para una consulta en particular

Ya se me ocurrio la solucion:

Código MySQL:
Ver original
  1. select * from TABLA where col2 > lastCheck or ( col2 = lastCheck and col1 > id);
__________________
Dead Nation
  #4 (permalink)  
Antiguo 13/07/2012, 12:00
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Combinar o unir dos selects para una consulta en particular

Hola pollin14:

Sólo una observación, esta consulta

Cita:
select * from TABLA where col2 = lastCheck and col1 > id;
En realidad no regresa ningún registro, al menos no con los datos que pones de ejemplo. Creo que la segunda condición debería ser col1 = id no??? y creo que deberías utilizar OR;

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+------+
  3. | col1 | col2 |
  4. +------+------+
  5. |    0 |   18 |
  6. |    1 |   18 |
  7. |    2 |   18 |
  8. |    0 |   19 |
  9. |    1 |   19 |
  10. |    2 |   19 |
  11. |    0 |   20 |
  12. |    0 |   21 |
  13. +------+------+
  14. 8 rows in set (0.00 sec)
  15.  
  16. mysql> SET @lastCheck = 18;
  17. Query OK, 0 rows affected (0.00 sec)
  18.  
  19. mysql> SET @id = 2;
  20. Query OK, 0 rows affected (0.00 sec)
  21.  
  22. mysql> SELECT * FROM TABLA
  23.     -> WHERE
  24.     ->   (col2 = @lastCheck AND col1 = @id) OR
  25.     ->   col2 > @lastCheck;
  26. +------+------+
  27. | col1 | col2 |
  28. +------+------+
  29. |    2 |   18 |
  30. |    0 |   19 |
  31. |    1 |   19 |
  32. |    2 |   19 |
  33. |    0 |   20 |
  34. |    0 |   21 |
  35. +------+------+
  36. 6 rows in set (0.00 sec)

Saludos
Leo.
  #5 (permalink)  
Antiguo 13/07/2012, 16:54
 
Fecha de Ingreso: marzo-2010
Ubicación: df
Mensajes: 58
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Combinar o unir dos selects para una consulta en particular

Hola leo!

La desigualdad es estricta.

Código MySQL:
Ver original
  1. select * from TABLA where col2 = lastCheck and col1 > id;

Mi solucion:

Código MySQL:
Ver original
  1. SELECT * FROM TABLA
  2.             WHERE col2 > @lastCheck OR
  3.                        ( col2 = @lastCheck AND col1 > @id);

La solucion de leo:
Código MySQL:
Ver original
  1. SELECT * FROM TABLA
  2.     -> WHERE
  3.     ->   (col2 = @lastCheck AND col1 > @id) OR
  4.     ->   col2 > @lastCheck;

La solucion de gnzsoloyo (con una correcion en el id)

Código MySQL:
Ver original
  1. SELECT DISTINCT col1, col2
  2.     FROM TABLA
  3.     WHERE
  4.         (col2 = @lastCheck AND col1 > id)
  5.         XOR
  6.         (col2 > @lastCheck);

Las tres funcionan, sin embargo la ultima, no daria ningun resultado si las dos expreciones de XOR regresan algo.

Saludos!
__________________
Dead Nation

Última edición por pollin14; 13/07/2012 a las 17:49 Razón: Error del igual

Etiquetas: select
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 10:58.