当前位置: 首页 > 面试题库 >

如果条件执行查询,否则执行其他查询

阎星河
2023-03-14
问题内容

在MySQL以外的任何事物中,它感觉都非常简单。

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

效果:

IF (SELECT COUNT(*) FROM table WHERE term LIKE "term") > 4000
   EXECUTE QUERY A
ELSE
   EXECUTE QUERY B

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;

查询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;

查询切换的原因是,根据“术语”的流行程度,我得到的结果时间截然不同。


问题答案:

编辑: 我下面说的关于要求存储过程的说法是不正确的。尝试这个:

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

确实,这是一个case表达式,在存储的proc外部也可以正常工作:-)

例如:

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)。



 类似资料:
  • 我有一个实体叫做Test。java有70个字段,其中一些字段还与其他实体相关(通过连接一对多、多对一等关联)。 我需要有一个这种类型的对象,但我不需要所有的字段,只有3个字段,其中一个字段与其他实体有外键关系。 因此,我在执行查询的同时编写了一个本机查询。jpa执行其他查询也会导致花费太多时间来完成。 这是我的实体类: 这是我的原生查询 我怎样才能得到具有选定字段的订单实体对象,我不需要其他字段意

  • 一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。关于所有模型检索选项的详细内容,请见数据模型参考。 在整个文档(以及参考)中,我们会大量使用下面的模型,它构成了一个博客应用。 from django.db import models class Blog(models.Model): name = mo

  • 执行查询 可以使用 execute() 和 query() 方法进行查询。execute() 方法会返回查询条数,query() 方法会返回结果。结果参照 PDOStatement <?php use Phinx\Migration\AbstractMigration; class MyNewMigration extends AbstractMigration { /**

  • Query 也可以直接执行一个SQL查询,即Select命令。在Postgres中支持原始SQL语句中使用 ` 和 ? 符号。 sql := "select * from userinfo" results, err := engine.Query(sql) 当调用 Query 时,第一个返回值 results 为 []map[string][]byte 的形式。 Query 的参数也允许传

  • 我有一个问题,我必须做一个查询,根据产品上是否有图像,我必须在列中显示“是”或“否”的值。我必须加入product表这是安全的,但我如何在查询中判断“image presence”字段是否为空,写“no”,否则写“yes”。我希望我已经解释过了。谢谢大家。

  • 问题内容: 我正在使用hibernate3.6.7进行映射。我将连接部分设置为静态。我需要服务程序永远运行,另一个服务将调用该服务的某些方法来查询数据库。当我让该服务运行时,第一天工作良好,但是第二天我调用它时,它给出了: 似乎连接已关闭。有人可以给我一些建议吗? 非常感谢你:) 问题答案: 听起来好像数据库已关闭连接或某个网络设备已终止套接字。您可以通过多种方法来解决此问题: 您可以经常在连接上