SQL 是否能够按照以下方式做一些事情:SELECT * FROM table WHERE column = everything
13 回答
对于出于任何原因(可能是动态 SQL)在查询中需要列名的任何人,一个不错的选择是SELECT * FROM table WHERE column = column
这与 非常相似WHERE 1=1
,但是它包含列名,这是我的解决方案所需的,也许还有一些其他的也需要。
SELECT * FROM table
如果你动态生成 SQL,它是
SELECT * FROM table WHERE 1=1
1=1
占位符允许您返回所有记录,或者如果您要返回子集或需要其他条件语句,则可以替换实际条件 。
您的问题允许三种解释:
- 您不关心该列:从 where 子句中删除它(或者如果这是唯一的子句,则将 where 子句一起删除)
- 您希望设置列,有点您不在乎:使用
WHERE column IS NOT nULL
- 您需要一个搜索,它还可以显示来自简单 SQL 模板的所有记录:
SELECT * FROM table WHERE column LIKE '%$searchterm%'
一切还是什么?
我猜你可以使用通配符。
SELECT * FROM table WHERE column LIKE "%"
您可以在查询中使用列名本身:
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)
所以你可以坚持“=”字符
SELECT * FROM table WHERE column = IF (? = '', column, ?);
这很晚,但可能对其他人有帮助
你可以试试这个。
where
isnull([column], '') = CASE WHEN @column IS NULL THEN isnull([column], '') ELSE @column END
您是否正在寻找 IN 标准运算符?
SELECT * from table where column in (1,2,3,4,5) or column in ('value', 'value2', 'value3');
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}}
好吧,我也遇到了同样的问题,以下解决了我的问题:
... where column = case when @variable = 'all' then column else @variable end
请记住,您必须始终发送默认值 ,我将默认值设置为“全部”。因此,如果我设置
@variable = 'all'
,mysql 将其读取为:where column = column
这与where 1=1
把猫王操作员放到那个领域
" . ($variable == 'selected value' ? '' : "AND column='" . $variable . "' ") . "
因此,如果您在 html 页面的选项中选择所有选项,此 ^^ 字段将不会运行,但是当您选择某些内容时,此代码将显示为 column='".$variable."'
如果这对任何人都有帮助...只是指出,如果您遇到诸如 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);
您可以使用
WHERE 1
1 就像在其他语言中总是正确的。所以你没有过滤器