2011-12-26 17 views
6

Sto cercando di combinare queste query MySQL ma non riuscirle a correggerle. Ecco lo pseudocodice che spero di combinare per ottenere una dichiarazione sql a riga singola.Combinare più query della stessa tabella in un'unica istruzione 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% 
} 

Grazie

+1

Hai provato qualcosa finora? – hakre

+0

Ho provato 'SELECT IF ('$ var1' IN (SELECT DISTINCT col1 FROM t1), (colA, colB, colC),) FROM t1' ma mi perdo nel flusso per le istruzioni if ​​ – user1115729

risposta

5

Prima di tutto lasciatemi dire che mjfgates potrebbe essere giusto. Il codice psuedo originale non è "cattivo" solo perché richiede due passaggi. Più complessa è la tua istruzione SQL che maggiori possibilità che il motore di query non trovi un piano ottimale. In questo caso particolare è meno probabile perché c'è una sola tabella a cui facciamo riferimento più volte, ma è qualcosa da tenere a mente in generale in queste situazioni. Ottenere un SQL in una sola istruzione non è sempre un obiettivo degno di per sé.

Ora per rispondere alla tua domanda:

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

Questo funziona! Grazie! – user1115729

+0

Nessun problema. Sentiti libero di accettare la risposta se ti ha aiutato. – TetonSig

3

penso ... io non lo farei. Questo è solo il tipo di cosa per cui sono state create stored procedure e viste, ognuna delle quali ha la dichiarazione if. Basta eseguire i selezioni in ordine dal più specifico al minimo e restituire il primo risultato che fornisce le righe.

Inoltre, potrei vedere un bug qui. Cosa succede se ci sono elementi nella tabella in cui col1 = $ var1, ma nessuno di questi elementi ha col2 come $ var2? Cosa dovrebbe succedere?

+0

Punto eccellente. Ho aggiornato la mia risposta per riflettere. – TetonSig

Problemi correlati