Mysql
 sql >> Datenbank >  >> RDS >> Mysql

IF Bedingung Abfrage durchführen, sonst Andere Abfrage durchführen

BEARBEITEN: Was ich unten über das Erfordernis einer gespeicherten Prozedur gesagt habe, ist NICHT WAHR. Versuchen Sie Folgendes:

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

Dies ist in der Tat ein case-Ausdruck und funktioniert gut außerhalb einer gespeicherten Prozedur :-)

Zum Beispiel:

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)

Alte Antwort unten aus historischem Interesse, da sie bereits Upvotes sammelt:

Sie können das Folgende verwenden, denke ich, aber nur innerhalb einer gespeicherten Prozedur:

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

Dies ist ein CASE -Anweisung, im Unterschied zu einem CASE Ausdruck ... https://dev.mysql.com/doc /refman/5.0/en/case.html hat mehr blutige Details.

Eigentlich vermute ich im Allgemeinen, wenn Sie verschiedene Abfragen bedingt ausführen möchten, müssen Sie sich gespeicherte Prozeduren ansehen - ich könnte mich irren, aber das ist an dieser Stelle mein Bauchgefühl. Wenn es geht, dann wahrscheinlich mit CASE-Ausdrücken!

Eine letzte Bearbeitung:In jedem Beispiel aus der realen Welt würde ich wahrscheinlich das bedingte Bit in meiner Anwendung ausführen und es einfach an SQL (oder an ein ORM, das mein SQL generieren würde) übergeben, sobald ich entschieden habe, wonach ich suchen soll.