SQL WHERE column = everything

Maj*_*0od 30 mysql sql

SQL是否能够按照以下方式执行某些操作: SELECT * FROM table WHERE column = everything

Rob*_*vey 24

SELECT * FROM table
Run Code Online (Sandbox Code Playgroud)

如果你动态生成SQL,那就是

SELECT * FROM table WHERE 1=1
Run Code Online (Sandbox Code Playgroud)

1=1占位符可以让你回到所有记录,或者如果你返回一个子集或需要额外的条件语句替代的实际情况.

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


Eug*_*eck 20

你的问题允许三个代表:

  1. 你不关心列:从where子句中删除它(或者删除where子句,如果这是唯一的子句)
  2. 你想要设置列,你不关心什么:使用 WHERE column IS NOT nULL
  3. 您想要一个搜索,它还可以显示简单SQL模板中的所有记录: SELECT * FROM table WHERE column LIKE '%$searchterm%'

  • 我有这个问题,在这里看不到答案。我的解释是-我有一个变量,用于定义列的值。但是,如果该变量为“ all”,则我不是在寻找值“ all”,而是查询行为就像WHERE子句不存在。我不想写两个查询。我正在寻找一个符号,例如。'*'查找所有内容。 (3认同)
  • “您不关心该列:将其从 where 子句中删除(或者将 where 子句全部删除,如果这是唯一的子子句)” - 有时您只使用在 where 子句中有一个参数的准备好的语句并且您不想在特定情况下将结果限制为参数的特定值。那时“其中 a = x 且 b = 任何内容”如果可用的话就会很有用。 (3认同)
  • @Truth - 不,最后我写了两个查询 - `if (var=all){query without WHERE}else {query with WHERE = var}` (2认同)

Ste*_*ins 11

什么都有?

我猜你可以使用通配符.

SELECT * FROM table WHERE column LIKE "%"
Run Code Online (Sandbox Code Playgroud)

  • 不,你错了.`='%'`表示"值恰好等于1%char" (3认同)
  • 那是什么意思?然后只是`SELECT*FROM table`.如果您不需要过滤器,则不要使用`WHERE`子句. (3认同)
  • 你又错了,因为它不包含 `NULL` 值 (2认同)
  • 这非常有用!对于那些问为什么的人,请考虑:`SELECT * FROM table WHERE field = '22'OR field LIKE'%';`如果找不到所需的行,它将返回一个后备行。 (2认同)

Dub*_*Dub 10

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

这与极为相似WHERE 1=1,但是它包含列名,这是我的解决方案所必需的,也许还需要其他名称。

  • 这不适用于空值,这对于我的复合键情况来说很好。 (4认同)
  • 我继承的一个项目的解决方案,正是需要这个 - 非常感谢 (2认同)

Tru*_*uth 5

SELECT * FROM table WHERE column = IF (? = '', column, ?);
Run Code Online (Sandbox Code Playgroud)


小智 5

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

SELECT * FROM TABLE WHERE COLUMN = COLUMN
Run Code Online (Sandbox Code Playgroud)

例如:

SELECT * FROM Student WHERE YEAR = YEAR
Run Code Online (Sandbox Code Playgroud)

或使用辅助参数:

SELECT * FROM Student WHERE YEAR = (CASE WHEN @year IS NOT NULL THEN @year ELSE YEAR END)
Run Code Online (Sandbox Code Playgroud)

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