sql >> Databáze >  >> RDS >> Mysql

POKUD podmínka Proveďte dotaz, jinak proveďte jiný dotaz

UPRAVIT: To, co jsem řekl níže o vyžadování uložené procedury, NENÍ PRAVDA. Zkuste toto:

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

Toto je skutečně případový výraz a funguje dobře mimo uložený proces :-)

Například:

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)

Stará odpověď níže pro historické zajímavosti, protože již sbírala hlasy pro:

Myslím, že můžete použít níže uvedené, ale pouze uvnitř uložené procedury:

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

Toto je CASE na rozdíl od CASE výraz... https://dev.mysql.com/doc /refman/5.0/cs/case.html má více krvavých detailů.

Ve skutečnosti se obecně domnívám, že pokud chcete podmínečně provádět různé dotazy, budete se muset podívat na uložené procedury – mohu se mýlit, ale v tuto chvíli to je můj pocit. Pokud to dokážete, bude to pravděpodobně s výrazy CASE!

Jedna poslední úprava:v jakémkoli příkladu ze skutečného světa bych pravděpodobně provedl podmíněný bit ve své aplikaci a jakmile bych se rozhodl, co hledat, prostě předám SQL (nebo ORM, který by mi vygeneroval SQL).




  1. PHP/MySQL - chyba syntaxe SQL?

  2. Jak nastavit Collation v MySQL databázi pomocí Django 2.* mysqlclient?

  3. Skupina po týdnu, jak získat prázdné týdny?

  4. Návrh relační databáze (MySQL)