始终选择表中所有记录的 WHERE 子句

Posted

技术标签:

【中文标题】始终选择表中所有记录的 WHERE 子句【英文标题】:A WHERE clause that always selects all records in a table 【发布时间】:2012-02-24 14:49:13 【问题描述】:

我希望创建一个生成 SQL 查询的函数,通过作为参数给出的表达式过滤结果(将作为“WHERE”子句传递)。如果省略该参数,则返回所有结果。

为了做到这一点,我可以测试一个空参数,并且只在给定参数的情况下构建 where 子句 (where = (parameter != null) ? "" : "WHERE " + parameter)。但是,我在想是否有一个我可以默认使用的表达式将始终返回所有结果。这样我就不需要测试是否包含WHERE关键字(where = "WHERE " + parameter)。

我故意没有提到转义参数以避免注入。我保证,我不会在我的解决方案中忘记这一点! :)

【问题讨论】:

您使用什么语言?或者您是否使用专有 SQL 语言(例如 T-SQL)来生成查询?请添加标签 类似:***.com/a/8149183/27535 它是一种专有的 SQL 语言,特定于我正在使用的应用程序。很有可能没有办法做到这一点,但我想我会找到这样做的“标准”方法作为起点。 【参考方案1】:

我通常为此使用1 = 1

【讨论】:

【参考方案2】:
(where = "WHERE 1 = 1 " + parameter)

在这种情况下,参数应以“AND”标记开头。

【讨论】:

【参考方案3】:

您可以将参数初始化为TRUE1

【讨论】:

并非所有 DBMS 都支持这一点,并且 OP 没有指定他正在使用什么 DMBS。

以上是关于始终选择表中所有记录的 WHERE 子句的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用“WHERE”子句来选择 SQL 语句中的所有记录?

用delete和trancate删除表记录的区别

在WHERE子句中选择最小日期

SQL 删除

where子句中的SSRS参数用法

MySQL WHERE语句筛选操作符