sql >> Database >  >> RDS >> Mysql

IF Voorwaarde Query uitvoeren, anders andere query uitvoeren

BEWERKEN: Wat ik hieronder zei over het vereisen van een opgeslagen procedure is NIET WAAR. Probeer dit:

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

Dit is inderdaad een case-expressie, en het werkt prima buiten een opgeslagen proces :-)

Bijvoorbeeld:

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)

Oud antwoord hieronder voor historisch belang, omdat het al upvotes verzamelt:

Je kunt het onderstaande gebruiken, denk ik, maar alleen binnen een opgeslagen procedure:

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

Dit is een CASE statement, in tegenstelling tot een CASE expressie... https://dev.mysql.com/doc /refman/5.0/en/case.html heeft meer bloederige details.

Eigenlijk vermoed ik dat als je verschillende query's voorwaardelijk wilt uitvoeren, je naar opgeslagen procedures moet kijken -- ik kan het mis hebben, maar dat is mijn gevoel op dit moment. Als je het kunt, zal het waarschijnlijk met CASE-expressies zijn!

Nog een laatste bewerking:in elk voorbeeld uit de echte wereld zou ik waarschijnlijk het voorwaardelijke bit in mijn toepassing doen en het gewoon overdragen aan SQL (of aan een ORM die mijn SQL zou genereren) zodra ik had besloten waarnaar ik moest zoeken.




  1. SQL - Krijg alleen het resultaat van het huidige jaar

  2. Per ongeluk postgres standaard superuser-privileges verwijderd - kan ik het terugkrijgen?

  3. Begrijpen / mySQL oftewel het bedriegen van ForeignKey-relaties in Django

  4. Zal UUID als primaire sleutel in PostgreSQL slechte indexprestaties geven?