IF条件执行查询,否则执行其他查询

How*_*opa 20 mysql

除了MySQL之外,它在任何事情上都很简单.

基本上我需要根据特定术语返回的结果数来切换我正在使用的索引类型以及一些其他条件.

有效的东西:

IF (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
   EXECUTE QUERY A
ELSE
   EXECUTE QUERY B
Run Code Online (Sandbox Code Playgroud)

这在MySQL语句中是否可行?

编辑:

查询A:

SELECT id 
FROM table_a
FORCE INDEX(id)
JOIN table_b ON table_a.id = table_b.id
WHERE term LIKE "term"
ORDER BY date
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)

查询B:

SELECT id 
FROM table_a
FORCE INDEX(term)
JOIN table_b ON table_a.id = table_b.id
WHERE term LIKE "term"
GROUP BY term    # These lines would be included for a few conditions not mentioned above.. but are necessary
HAVING COUNT = 1 # same...  
ORDER BY date
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)

查询切换的原因是我根据"术语"的流行度得到了截然不同的结果时间.

Jam*_*een 21

编辑:我在下面说的关于要求存储过程的内容是不正确的.试试这个:

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

这确实是一个案例表达式,它在存储过程之外工作正常:-)

例如:

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)
Run Code Online (Sandbox Code Playgroud)

以下旧答案的历史兴趣,因为它已收集upvotes:

您可以使用下面我认为,但只能在存储过程中使用:

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

这是一个CASE声明,与CASE表达式不同... https://dev.mysql.com/doc/refman/5.0/en/case.html有更多的血腥细节.

实际上,我怀疑一般情况下,如果你想有条件地执行不同的查询,你需要查看存储过程 - 我可能是错的,但这是我的直觉.如果你能做到,那可能就是CASE表达式!

最后一个编辑:在任何现实世界的例子中,我可能会在我的应用程序中执行条件位,并且在我决定要搜索什么之后,只需将其移交给SQL(或生成我的SQL的ORM).

  • 您可能还应该提到,这仅在查询仅返回1行时有效。否则,您将收到一条错误消息,指出子查询返回的行数超过1。 (3认同)