编辑:我在下面所说的关于需要存储过程的内容是不正确的。尝试这个:
SELECT CASE WHEN ( (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000 )
THEN <QUERY A>
ELSE <QUERY B>
END
这确实是一个 case 表达式,它在存储过程之外可以正常工作:-)
例如:
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)。