sql >> Databasteknik >  >> RDS >> Mysql

IF skick Utför fråga, annars utför annan fråga

EDIT: Det jag sa nedan om att kräva en lagrad procedur är INTE SANT. Prova detta:

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

Detta är verkligen ett falluttryck, och det fungerar bra utanför en lagrad proc :-)

Till exempel:

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)

Gammalt svar nedan för historiskt intresse, eftersom det redan samlar upp röster:

Du kan använda nedanstående tror jag, men bara i en lagrad procedur:

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

Detta är ett CASE uttalande, till skillnad från en CASE uttryck... https://dev.mysql.com/doc /refman/5.0/en/case.html har mer blodiga detaljer.

Egentligen misstänker jag i allmänhet att om du vill köra olika frågor villkorligt, kommer du att behöva se mot lagrade procedurer -- jag kan ha fel, men det är min magkänsla vid det här laget. Om du kan göra det, kommer det förmodligen att vara med CASE-uttryck!

En sista redigering:i vilket exempel som helst i den verkliga världen skulle jag förmodligen göra den villkorliga biten i min applikation och bara lämna över till SQL (eller till en ORM som skulle generera min SQL) när jag hade bestämt mig för vad jag skulle söka efter.




  1. Hur man byter namn på en tabell i Microsoft Access

  2. Vad ska man göra när man behöver heltal större än 20 siffror på mysql?

  3. Start RAC-databasen misslyckas med fel ORA-12547

  4. PHP genererar dynamisk PDO-infogning