Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

IF Condição Executar consulta, senão executar outra consulta


EDITAR: O que eu disse abaixo sobre exigir um procedimento armazenado NÃO É VERDADEIRO. Tente isto:
SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
    THEN <QUERY A>
    ELSE <QUERY B>
END

Esta é, de fato, uma expressão case e funciona bem fora de um proc armazenado :-)

Por exemplo:
mysql> SELECT CASE WHEN ( 5 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END;
+---------------------------------------------------------------------+
| CASE WHEN ( 5 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END |
+---------------------------------------------------------------------+
| foo                                                                 |
+---------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> SELECT CASE WHEN ( 3 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END;
+---------------------------------------------------------------------+
| CASE WHEN ( 3 > 4 ) THEN ( SELECT 'foo' ) ELSE ( SELECT 'bar' ) END |
+---------------------------------------------------------------------+
| bar                                                                 |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)

Resposta antiga abaixo por interesse histórico, pois já reúne votos positivos:

Você pode usar o abaixo eu acho, mas apenas dentro de um procedimento armazenado:
CASE (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
    WHEN 1 THEN <QUERY A>
    ELSE <QUERY B>
END CASE

Este é um CASE declaração, diferente de um CASE expressão... https://dev.mysql.com/doc /refman/5.0/en/case.html tem mais detalhes sangrentos.

Na verdade, suspeito que, em geral, se você deseja executar consultas diferentes condicionalmente, precisará procurar procedimentos armazenados - posso estar errado, mas esse é o meu pressentimento neste momento. Se você puder fazer isso, provavelmente será com expressões CASE!

Uma última edição:em qualquer exemplo do mundo real, eu provavelmente faria o bit condicional no meu aplicativo e apenas entregaria ao SQL (ou a um ORM que geraria meu SQL) assim que decidisse o que procurar.