50

SQL 是否能够按照以下方式做一些事情:SELECT * FROM table WHERE column = everything

4

13 回答 13

37

对于出于任何原因(可能是动态 SQL)在查询中需要列名的任何人,一个不错的选择是SELECT * FROM table WHERE column = column

这与 非常相似WHERE 1=1,但是它包含列名,这是我的解决方案所需的,也许还有一些其他的也需要。

于 2018-09-18T15:54:56.277 回答
30
SELECT * FROM table

如果你动态生成 SQL,它是

SELECT * FROM table WHERE 1=1

1=1占位符允许您返回所有记录,或者如果您要返回子集或需要其他条件语句,则可以替换实际条件 。

另请参阅
为什么有人会在 SQL 子句中使用 WHERE 1=1 AND <conditions>?

于 2012-05-30T22:39:16.600 回答
21

您的问题允许三种解释:

  1. 您不关心该列:从 where 子句中删除它(或者如果这是唯一的子句,则将 where 子句一起删除)
  2. 您希望设置列,有点您不在乎:使用WHERE column IS NOT nULL
  3. 您需要一个搜索,它还可以显示来自简单 SQL 模板的所有记录:SELECT * FROM table WHERE column LIKE '%$searchterm%'
于 2012-05-30T22:41:56.270 回答
9

一切还是什么?

我猜你可以使用通配符。

SELECT * FROM table WHERE column LIKE "%"
于 2012-05-30T22:37:55.280 回答
7

您可以在查询中使用列名本身:

SELECT * FROM TABLE WHERE COLUMN = COLUMN

例如:

SELECT * FROM Student WHERE YEAR = YEAR

或使用辅助参数:

SELECT * FROM Student WHERE YEAR = (CASE WHEN @year IS NOT NULL THEN @year ELSE YEAR END)

所以你可以坚持“=”字符

于 2020-01-02T07:49:52.307 回答
5
SELECT * FROM table WHERE column = IF (? = '', column, ?);
于 2019-06-21T21:47:50.817 回答
2

这很晚,但可能对其他人有帮助

你可以试试这个。

where 
    isnull([column], '') = CASE WHEN @column IS NULL THEN isnull([column], '') ELSE @column END 
于 2015-10-17T16:25:18.200 回答
1

您是否正在寻找 IN 标准运算符?

SELECT * from table where column in (1,2,3,4,5) or column in ('value', 'value2', 'value3');
于 2012-05-30T22:38:11.093 回答
1

I've faced this problem while developing dynamically composing query. Here is my solution in short:

WHERE (column = ANY (SELECT distinct column) OR column IS NULL)

This works with NULL values and practically it is identical to empty WHERE statement. I use brackets in order to keep the ability to add more WHERE options using AND operator.

It means that this:

select count("objectId"), "source"
from "SomeTable"
where "createdAt" > '2020-07-06'
    and ("source" = any (select distinct "source") or "source" is null)
    and ("country" = any (select distinct "country") or "country" is null)
    and "channel" is not null
group by "source"

equals to this:

select count("objectId"), "source"
from "SomeTable"
where "createdAt" > '2020-07-06'
    and "channel" is not null
group by "source"

So I can make a query template:

...
    WHERE (column = {{filter_value}} )
...

and set ANY (SELECT distinct column) OR column IS NULL) as default value for {{filter_value}}

于 2020-07-06T21:10:11.363 回答
1

好吧,我也遇到了同样的问题,以下解决了我的问题:

... where column = case when @variable = 'all' then column else @variable end

请记住,您必须始终发送默认值 ,我将默认值设置为“全部”。因此,如果我设置@variable = 'all',mysql 将其读取为: where column = column这与where 1=1

于 2019-04-17T16:00:53.607 回答
0

把猫王操作员放到那个领域

" . ($variable == 'selected value' ? '' : "AND column='" . $variable . "' ") . "

因此,如果您在 html 页面的选项中选择所有选项,此 ^^ 字段将不会运行,但是当您选择某些内容时,此代码将显示为 column='".$variable."'

于 2020-07-15T13:10:03.757 回答
0

如果这对任何人都有帮助...只是指出,如果您遇到诸如 SELECT * FROM something WHERE(可以是特定的或所有内容)之类的问题(例如过滤内容),则可以使用
SELECT * FROM something as s WHERE (?1 = 0 OR ?1 = s.type = ?1)
0 这里只是为所有人预定义的,所以感觉可以自由更改,我在使用 JPA 存储库和 hibernate 进行过滤时需要这个。由于准备好的陈述的安全性,您不能按照先前答案的建议在医学上执行此操作。其中 ?1 对应于:

  Page<Something> filterSometing(Long type,Pageable pageable);
于 2019-01-29T15:31:10.510 回答
0

您可以使用

WHERE 1

1 就像在其他语言中总是正确的。所以你没有过滤器

于 2021-10-04T12:32:22.580 回答