編集:ストアド プロシージャの必要性について以下で述べたことは真実ではありません。これを試して:
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
です... https://dev.mysql.com/doc/refman/5.0/en/case.htmlには、さらに悲惨な詳細があります。
実際、条件付きでさまざまなクエリを実行したい場合は、一般的に、ストアド プロシージャに目を向ける必要があるのではないかと思います。間違っている可能性もありますが、現時点ではそれが私の直感です。できるとしたらCASE式でしょう!
最後の編集: 実際の例では、アプリケーションで条件付きビットを実行し、何を検索するかを決定したら、SQL (または SQL を生成する ORM) に渡すだけです。