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

PROBLEMA PARA UNA NEGACION <> o LIKE NOT

Estas en el tema de PROBLEMA PARA UNA NEGACION <> o LIKE NOT en el foro de Mysql en Foros del Web. Trato omitir donde el campo Status indique que esta cancelado, y hace todo lo contrario me trae de regreso donde encuentra la palabra 'Cancelado' sl2.:?? ...
  #1 (permalink)  
Antiguo 25/07/2013, 15:58
Avatar de fmb1982  
Fecha de Ingreso: junio-2007
Mensajes: 128
Antigüedad: 16 años, 10 meses
Puntos: 0
Exclamación PROBLEMA PARA UNA NEGACION <> o LIKE NOT

Trato omitir donde el campo Status indique que esta cancelado, y hace todo lo contrario me trae de regreso donde encuentra la palabra 'Cancelado' sl2.:??

Código MySQL:
Ver original
  1. SELECT rfc_s, nom_s, ape1_s, ape2_s, monto, tpago from (
  2. (SELECT rfc_s, nom_s, ape1_s, ape2_s, mon_pg as monto, cpc_conc.`status` as tpago from soc_per, cuo_pag, cpc_conc WHERE rfc_s like rfc_soc and id_r like id_transaccion)
  3. (SELECT rfc_s, nom_s, ape1_s, ape2_s, mon_pg as monto, tip_pg  as tpago from soc_per, cuo_pag_vn, cpc_conc WHERE rfc_s like cuo_pag_vn.rfc_soc)) as tabla where tpago != '%Cancelado%'
__________________
Fidel Medina Bravo
TodocabeN150charsabiendoloacomodar...
http://about.me/fidelMB

Última edición por gnzsoloyo; 25/07/2013 a las 17:04
  #2 (permalink)  
Antiguo 25/07/2013, 17:22
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: PROBLEMA PARA UNA NEGACION <> o LIKE NOT

Mira, el problema, además del terrible abuso de la cláusula LIKE (que usas hasta donde no se debe), es que en realidad no estás pidiendo que descarte la palabra "Cancelado", sono la "%Cancelado%" con los signos "%".
El "=" no opera como LIKE, sino que toma la cadena tal y como es, sin usar los comodines de texto.
¿Entiendes?
Además de eso, los JOIN están terriblemente mal escritos. No puedes usar LIKE en ese contexto, aunque semánticamente se comporte como un "=", porque el algoritmo interno de MySQL lo tomará de un modo completamente ineficiente. Eso, sin contar con que es un abuso innecesario.
Para escribirte la consulta como debería realmente estar escrita, no estoy seguro de a qué tabla pertenecen algunas columnas. Pero haciendo una suposición podríamos intentar:
Código MySQL:
Ver original
  1.     `rfc_s`,
  2.     `nom_s`,
  3.     `ape1_s`,
  4.     `ape2_s`,
  5.     `mon_pg` `monto`,
  6.     `cpc_conc`.`status` `tpago`
  7.     `soc_per`
  8.     INNER JOIN `cuo_pag` ON `rfc_soc` = `rfc_s`
  9.     INNER JOIN `cpc_conc`ON `id_r` = `id_transaccion`
  10.     `tpago` != 'Cancelado'
  11.     `rfc_s`,
  12.     `nom_s`,
  13.     `ape1_s`,
  14.     `ape2_s`,
  15.     `mon_pg` `monto`,
  16.     `tip_pg` `tpago`
  17.     `soc_per`
  18.     INNER JOIN `cuo_pag_vn` ON `rfc_s` LIKE `cuo_pag_vn`.`rfc_soc`
  19.     INNER JOIN `cpc_conc`ON `id_r` = `id_transaccion`
  20.     `tpago` != 'Cancelado'

Perdón por la falta de anestesia, pero pocas veces veo consultas tan mal escritas. Parece que no hubieses leído un manual básico de SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 25/07/2013 a las 17:42

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




La zona horaria es GMT -6. Ahora son las 11:37.