Pregunta

Tengo un problema con una consulta que utiliza actualmente

LEFT JOIN weblog_data AS pwd 
  ON (pwd.field_id_41 != '' 
  AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%'))

Sin embargo, estoy descubriendo que necesito usarlo solo si primero no hay una coincidencia exacta.Lo que sucede es que la consulta tiene una doble inmersión debido al uso de LIKE, por lo que si primero prueba una coincidencia exacta, evitará el problema de la doble inmersión.¿Alguien puede proporcionarme alguna orientación adicional?

¿Fue útil?

Solución

Parece que desea unir las tablas con el alias pwd y ewd en su fragmento basándose primero en una coincidencia exacta y, si eso falla, luego en la comparación similar que tiene ahora.

Prueba esto:

LEFT JOIN weblog_data AS pwd1 ON (pwd.field_id_41 != '' AND pwd.field_id_41 = ewd.field_id_32)
LEFT JOIN weblog_data AS pwd2 ON (pwd.field_id_41 != '' AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%'))

Luego, en tu cláusula select, usa algo como esto:

select
  isnull(pwd1.field, pwd2.field)

sin embargo, si está tratando con un campo que puede ser nulo en pwd, eso causará problemas, esto debería funcionar:

select
  case pwd1.nonnullfield is null then pwd2.field else pwd1.field end

También tendrás que asegurarte de hacer un grupo por, ya que la unión a pwd2 seguirá agregando filas a tu conjunto de resultados, incluso si terminas ignorando los datos que contiene.

Otros consejos

estás hablando de evaluación de cortocircuito.

Echa un vistazo a este artículo, puede que te ayude:http://beingmarkcohen.com/?p=62

usando TSQL, ejecute una coincidencia exacta, verifique el número de filas == 0, si es así, ejecute lo similar; de lo contrario, no ejecute lo similar ni agregue resultados similares debajo de las coincidencias exactas.

Sólo puedo pensar en hacerlo en código.Busca una coincidencia exacta, si el resultado está vacío busca un ME GUSTA.Otra opción es un DÓNDE dentro de esta consulta tal que DÓNDE ({recuento de coincidencia exacta}=0), en cuyo caso, no se realizará la comparación con LIKE si la coincidencia exacta arroja más de 0 resultados.Pero es terriblemente ineficiente...sin mencionar el hecho de que usarlo de manera significativa en el código es bastante difícil.

Yo elegiría un If (recuento de coincidencia exacta = 0) y luego haría la consulta; de lo contrario, simplemente usaría el resultado de la coincidencia exacta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top