MySQL - Consulta SQL

   
Vista:

Consulta SQL

Publicado por Mario (3 intervenciones) el 11/07/2015 02:45:36
Hola a todos!
Tengo que hacer una consulta a una tabla, la búsqueda debe estar condicionada por el valor de dos campos (ID e IDr) Algo así no me sirve :
Código MySQL:

Ver original

SELECT * FROM tabla WHERE fecha='fecha' AND ( ID='valor' OR IDr='valor')



debería ser : Si IDr>0 buscar por IDr, Si IDr es Null o=0 buscar por ID

Ejemplo :

Row1= ID=2 , IDr=NULL
Row2= ID=2 , IDr=5
Row3= ID=4 , IDr=2

Si el 'valor' de la búsqueda es=2 debería dar como resultado la línea 1 y la 3 y no la linea 2

Probé con variables, con CASE etc, pero no me funciona...
Si hay alguien que pueda ayudarme estaré muy agradecido
Saludos a todos y gracias de antemano
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

Consulta SQL

Publicado por SuperIndio (35 intervenciones) el 13/07/2015 15:15:38
tenes que abrir en 2 consultas, asi:
1
2
3
4
5
6
7
8
9
SELECT * FROM tabla
 WHERE fecha = 'fecha'
   AND IDR = 'valor'
   AND IDR > 0
UNION ALL
SELECT * FROM tabla
 WHERE fecha = 'fecha'
   AND ID  = 'valor'
   AND ( IDR = 0 OR IDR IS NULL)
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

Consulta SQL

Publicado por leonardo_josue (81 intervenciones) el 13/07/2015 16:46:50
Hola Mario:

Creo que la respuesta de Superindio es válida, sin embargo, también creo que no hay necesidad de que tengas que hacer dos consultas con un UNION, sino simplemente armar una sentencia lógica para el WHERE...

Tienes dos condiciones que te dan la valides de un registro

1. Que IDr sea 0 o NULL y que id sea igual al valor de entrada o traducido en lenguaje Lógico sería algo así:

1
(IDr = 0 or IDr IS NULL) and id = 'valor'

2. Que IDr sea mayor a 0 y que IDr sea igual al valor de entrada, o

1
IDr > 0 and IDr = 'valor'


OJO, hay que tener cuidado con el uso de paréntesis, pues los operadores OR y AND tienen diferente jerarquía. Entonces, los registros que se deben mostrar son aquellos que cumplan alguna de las condiciones, por lo tanto, puedes unirlas con un operador OR... de tal suerte que la consulta quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> SELECT * FROM tabla;
+-------+------+------+
| idrow | id   | idr  |
+-------+------+------+
|     1 |    2 | NULL |
|     2 |    2 |    5 |
|     3 |    4 |    2 |
+-------+------+------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla
    -> WHERE
    ->       ((idr = 0 OR idr IS NULL ) AND id = 2) OR
    ->       (idr > 0 AND idr = 2);
+-------+------+------+
| idrow | id   | idr  |
+-------+------+------+
|     1 |    2 | NULL |
|     3 |    4 |    2 |
+-------+------+------+
2 rows in set (0.00 sec)

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

Consulta SQL

Publicado por Mario (3 intervenciones) el 14/07/2015 03:34:39
Gracias Leo!!!
Lo voy a probar
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

Consulta SQL

Publicado por Mario (3 intervenciones) el 14/07/2015 03:54:32
Muchas Gracias Superindio y Leo voy a probar las dos
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