編集: ストアドプロシージャの要求について以下で述べたことは正しくありません。これを試してください:
SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
THEN <QUERY A>
ELSE <QUERY B>
END
これは確かにケース式であり、ストアドプロシージャの外部では正常に機能します:-)
例:
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)
すでに賛成票を集めているため、歴史的な関心については以下の古い回答:
以下を使用できると思いますが、ストアドプロシージャ内でのみ使用できます:
CASE (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
WHEN 1 THEN <QUERY A>
ELSE <QUERY B>
END CASE
これはCASE
です CASE
とは異なるステートメント 式...
実際、一般的に、条件付きでさまざまなクエリを実行する場合は、ストアドプロシージャに目を向ける必要があると思います。間違っている可能性がありますが、それが現時点での私の直感です。あなたがそれを行うことができれば、それはおそらくCASE式であるでしょう!
最後の編集:実際の例では、おそらくアプリケーションで条件付きビットを実行し、検索対象を決定したらSQL(またはSQLを生成するORM)に渡すだけです。