mysql - 如何仅使用 SQL 实现动态 WHERE 子句? (我不能使用任何编程语言字符串连接)

标签 mysql sql database where-clause rdbms

我正在使用 MySql 并且我不太喜欢 SQL,并且我有以下查询参数问题:

我有一个查询,它有一个强制参数和一组可选参数。

目前我是这样实现这种情况的(但在我看来是错误的):

WHERE Localization.id = 2

AND(
    EnutriMessageDetails.crop_id = 2
    OR
    EnutriMessageDetails.process_phase_id = 1
    OR
    EnutriMessageDetails.process_phase_action_id = 1
    OR
    EnutriMessageDetails.user_type_id = 1
    OR
    EnutriMessageDetails.urgency_id = 1
    OR
    EnutriMessageDetails.provided_by_id = 1
    OR
    EnutriMessageDetails.cleared_by_id = 1
    )

其中Localization.id是唯一的必选参数,所有参数都放入AND(并用OR运算符相互连接) 是可选参数。

好的问题是,据我所知,也许我必须使用类似Dynamic WHERE-Clause 的东西,举个例子:

如果仅指定了这些参数(Localization.id、EnutriMessageDetails.crop_id、EnutriMessageDetails.crop_id),则创建以下 WHERE 子句:

WHERE 
    Localization.id = 2
AND
    EnutriMessageDetails.crop_id = 2
AND
    EnutriMessageDetails.process_phase_id = 1

等等。

我知道使用使用字符串连接的编程语言非常简单,但在这种特定情况下我不能这样做,因为我的查询直接运行到采用 SQL 并使用此 SQL 创建 XML 的工具中。我不可能进行任何类型的字符串连接以使用字符串连接动态构建 WHERE 子句。

那么,是否存在一种仅使用 SQL 来完成此操作的方法?

最佳答案

我在 mssql 中通过从我的 Query 中创建一个字符串来完成此操作,之后您可以执行此字符串而不是 query 。 我对这种方法没有任何问题。

EXEC ( 'SELECT * FROM mytable');

Go;

您可以使用字符串变量或您喜欢的任何字符串组合。 https://msdn.microsoft.com/de-de/library/ms188332(v=sql.120).aspx

好像mysql也有一样的.......``

关于mysql - 如何仅使用 SQL 实现动态 WHERE 子句? (我不能使用任何编程语言字符串连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47903311/

相关文章:

java - Weka 在 Eclipse 中连接 MySQL

sql - oracle sql中用特殊字符替换HTML代码的有效方法

sql - SELECT或INSERT函数是否容易出现竞争状况?

php - 如何从php将空值传递给具有日期类型的数据库mysql

sql - Golang 的 SQL 包是否无法进行即席/探索性查询?

java - 设置和检索从mysql到java的自动增量值(在jlabel中设置)

MySql 错误 : Can't update table in stored function/trigger because it is already used by statement which invoked this stored function/trigger

mysql - 存在与我找不到的事件相关的语法问题

sql - 替换或删除字符,然后转换为十进制

c# - 如何在gridview中显示计算值?