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

IF en clausula WHERE

Estas en el tema de IF en clausula WHERE en el foro de Mysql en Foros del Web. Hola, hay forma de poner un condicional IF en la clausula WHERE? algo asi como que si un campo esta vacio que no ejecute algo ...
  #1 (permalink)  
Antiguo 06/04/2011, 18:30
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
IF en clausula WHERE

Hola, hay forma de poner un condicional IF en la clausula WHERE? algo asi como que si un campo esta vacio que no ejecute algo del WHERE, pongo mi consulta:

Código MySQL:
Ver original
  1. SELECT B.nombre_empresa, C.nombre, A.cred_linea1, A.cred_uso1, D.nombre, A.cred_linea2, A.cred_uso2
  2. FROM creditos A, cliente B, empleados C, empleados D
  3. WHERE A.cred_cliente = B.id_cli
  4. AND A.cred_proveedor1 = C.codigo
  5. AND A.cred_proveedor2 = D.codigo

el condicional seria que si el campo A.cred_proveedor2 esta vacio que el ultimo AND no se cuente.

Como se podria hacer eso?
__________________
El aprendiz.
  #2 (permalink)  
Antiguo 07/04/2011, 07:53
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: IF en clausula WHERE

Hola juandedios:

No termino de entender para qué te serviría hacer lo que estás pidiendo, creo que si nos pones algunos datos de ejemplo y lo que esperas de salida podríamos proponerte alguna solución.

También te hago una recomendación: utiliza INNER JOIN, LEFT JOIN o RIGTH JOIN para unir tus tablas en lugar de listarlas en el FROM, es mucho más eficiente y creo que podría servir para lo que quieres hacer.

Código MySQL:
Ver original
  1. FROM Tabla1, Tabla2 WHERE Tabla1.campo = Tabla2.campo
  2.  
  3. FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.campo = Tabla2.campo

Aunque el resultado es el mismo el performance de la consulta con INNER es mejor.

Si no sabes cómo funcionan los JOIN's, preguntale a santa Wikipedia

Saludos
Leo.
  #3 (permalink)  
Antiguo 07/04/2011, 10:11
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: IF en clausula WHERE

gracias por tu sugerencia, lo revisaré y lo implmentare, ahora para que quiero lo que pido, o quizas quiero resolverlo de una manera equivocada. Lo que sucede es que como ves en la lista de campos hay 2 que son: C.nombre y D.nombre y en el WHERE estan AND A.cred_proveedor1 = C.codigo y
AND A.cred_proveedor2 = D.codigo, pero resulta que a veces el campo A.cred_proveedor2 estará vacío, entonces con lo que pongo en el WHERE solo apareceran aquellos que tengan datos en ambos campos y yo quiero que aparescan todos los registros de la consulta incluyendo los que en A.cred_proveedor2 este vacío.

Espero que me haya dejado entender.
__________________
El aprendiz.
  #4 (permalink)  
Antiguo 07/04/2011, 14:50
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: IF en clausula WHERE

Hola de nuevo juandedios.

si entendí bien tienes algo como esto:

Código:
Tabla EMPLEADOS
codigo|Nombre
--------------------
1|UNO
2|DOS
3|TRES

Tabla CREDITOS
idCredito|cred_proveedor1|cred_proveedor2
------------------------------------------------------------
1|1|2
2|2|null
3|1|3
4|3|null
de tal manera que lo que tú quieres obtener sería algo como esto:

idCredito|cred_proveedor1|nombre|cred_proveedor2|n ombre
------------------------------------------------------------
1|1|UNO|2|DOS
2|2|DOS|null|null
3|1|UNO|3|TRES
4|3|TRES|null|null

Si esto y en lo correcto, la consulta quedaría más o menos así:

Código:
select c.idCredito, c.cred_proveedor1,e1.nombre,c.cred_proveedor2,e2.nombre
from CREDITOS c
inner join EMPLEADOS e1 on c.cred_proveedor1 = e1.codigo
LEFT JOIN EMPLEADOS e2 on c.creed_proveedor = e2.codigo
Dale un vistazo al código, checa la parte del LEFT JOIN para que trates de entender cuál es su comportamiento y si continuas con problemas postea algunos datos de ejemplo de tus tablas y qué necesitas de salida, para ver qué alternativas puedes tener.

Saludos
Leo.
  #5 (permalink)  
Antiguo 07/04/2011, 18:14
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Respuesta: IF en clausula WHERE

muchas gracias leonardo_josue, asi quedó perfecto, voy a revisar bien esto de los INNER JOIN y compañia, gracias por todo
__________________
El aprendiz.

Etiquetas: clausula
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 16:33.