sql >> Database teknologi >  >> RDS >> Mysql

HVIS tilstand Udfør forespørgsel, ellers udfør anden forespørgsel

EDIT: Det, jeg sagde nedenfor om at kræve en lagret procedure, er IKKE SAND. Prøv dette:

SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
    THEN <QUERY A>
    ELSE <QUERY B>
END

Dette er faktisk et kasusudtryk, og det fungerer fint uden for en lagret proc :-)

For eksempel:

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)

Gamle svar nedenfor for historisk interesse, da det allerede samler opstemmer:

Du kan bruge nedenstående tror jeg, men kun i en lagret procedure:

CASE (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
    WHEN 1 THEN <QUERY A>
    ELSE <QUERY B>
END CASE

Dette er en CASE sætning, til forskel fra en CASE udtryk... https://dev.mysql.com/doc /refman/5.0/da/case.html har flere blodige detaljer.

Faktisk formoder jeg generelt, at hvis du vil udføre forskellige forespørgsler betinget, bliver du nødt til at se mod lagrede procedurer -- jeg kan tage fejl, men det er min mavefornemmelse på dette tidspunkt. Hvis du kan gøre det, vil det sandsynligvis være med CASE-udtryk!

En sidste redigering:i et hvilket som helst eksempel fra den virkelige verden ville jeg nok lave den betingede bit i min applikation og bare aflevere til SQL (eller til en ORM, som ville generere min SQL), når jeg havde besluttet, hvad jeg skulle søge efter.




  1. Se tilskud i MySQL

  2. Brug af vælg i lokal variabel og forberedt erklæring i mysql

  3. Hvordan finder man huller i sekventiel nummerering i mysql?

  4. Sådan benchmarker du MySQL &MariaDB's ydeevne ved hjælp af SysBench