2011-12-26 17 views
6

Estoy tratando de combinar estas consultas MySQL pero no las estoy haciendo bien. Aquí está el pseudocódigo que estoy esperando combinar para obtener una declaración SQL de una sola línea.Combinando varias consultas de la misma tabla en una sola declaración SQL

$var1 = "abc" 
$var2 = "def" 

IF ($var1 IN (SELECT DISTINCT col1 FROM t1)) 
{ 
    SELECT colA, colB, colC FROM t1 WHERE col1 = $var1 AND col2 LIKE '%$var2%' 
} 
ELSE 
{ 
    SELECT colA, colB, ColC FROM t1 WHERE col2 LIKE %$var1% 
} 

Gracias

+1

¿Has probado algo hasta ahora? – hakre

+0

He intentado 'SELECT IF ('$ var1' IN (SELECCIONAR DISTINCT col1 FROM t1), (colA, colB, colC),) FROM t1' pero me pierdo en el flujo para las declaraciones if – user1115729

Respuesta

5

Primero déjeme decir que mjfgates podía estar bien. El código original de psuedo no es "malo" solo porque lleva dos pasos. Cuanto más compleja sea su declaración de SQL, mayor es la probabilidad de que el motor de consulta no encuentre un plan óptimo. En este caso particular, es menos probable porque solo hay una sola tabla a la que nos referimos varias veces, pero es algo a tener en cuenta en general en estas situaciones. Obtener un SQL a una declaración no siempre es un objetivo digno en sí mismo.

Ahora para responder a su pregunta:

select colA,colB,colc from table1 t1 
    where 
    (
    (col1 = $var1 and col2 like '%$var2%') and 
      EXISTS (select 1 from table1 t2 where t2.col1 = $var1) 
    ) 
    or 
    (
    (col2 LIKE %$var1%) and 
      NOT EXISTS (select 1 from table1 t3 where t3.col1 = $var1) 
    ) 
+0

¡Esto funciona! ¡Gracias! – user1115729

+0

No hay problema. Siéntete libre de aceptar la respuesta si te ha ayudado. – TetonSig

3

Creo ... no lo haría. Este es justamente el tipo de cosas para las cuales los procedimientos almacenados y las vistas, cada una de las cuales tiene la declaración if, fueron hechas para. Simplemente ejecute las selecciones en orden de lo más específico a lo menos, y devuelva el primer resultado que da filas.

Además, es posible que vea un error aquí. ¿Qué sucede si hay elementos en la tabla donde col1 = $ var1, pero ninguno de esos elementos tiene col2 como $ var2? ¿Qué se supone que va a pasar?

+0

Excelente punto. He actualizado mi respuesta para reflejar. – TetonSig

Cuestiones relacionadas