SQL WHERE column = everything

时间:2012-05-30 22:36:03

标签: mysql sql

SQL是否能够做到这一点:SELECT * FROM table WHERE column = everything

12 个答案:

答案 0 :(得分:23)

SELECT * FROM table

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

SELECT * FROM table WHERE 1=1

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

另见
Why would someone use WHERE 1=1 AND <conditions> in a SQL clause?

答案 1 :(得分:18)

你的问题允许三个代表:

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

答案 2 :(得分:10)

一切还是其他什么?

我猜你可以使用通配符。

SELECT * FROM table WHERE column LIKE "%"

答案 3 :(得分:6)

对于出于任何原因需要查询中列名称的任何人,SELECT * FROM table WHERE column = column

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

答案 4 :(得分:4)

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

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)

所以您可以按住“ =” char

答案 5 :(得分:2)

这已经很晚了但可能对其他人有所帮助

你可以试试这个。

where 
    isnull([column], '') = CASE WHEN @column IS NULL THEN isnull([column], '') ELSE @column END 

答案 6 :(得分:1)

您是否正在寻找IN标准运营商? SELECT * from table where(1,2,3,4,5)中的列或('value','value2','value3')中的列;

答案 7 :(得分:1)

SELECT TIME_B,
       EVENT_B,
       CONNECT_BY_ROOT( TIME_A ) AS TIME_A,
       CONNECT_BY_ROOT( EVENT_A ) AS EVENT_A
FROM   (
  SELECT A.*,
         B.*,
         ROW_NUMBER() OVER ( ORDER BY TIME_B ) AS rn
  FROM   tableB B
         LEFT OUTER JOIN tableA A
         ON ( B.TIME_B = A.TIME_A AND A.EVENT_A = 'a0' )
)
WHERE LEVEL <= 2
START WITH EVENT_A IS NOT NULL
CONNECT BY PRIOR rn -2 <= rn AND rn < PRIOR rn
ORDER BY time_a, time_b

答案 8 :(得分:0)

如果这可以帮助任何人...只是指出,如果您遇到诸如SELECT * FROM WHERE(可能是特定的或所有内容)之类的问题,例如过滤内容, 你可以用
 SELECT * FROM something as s WHERE (?1 = 0 OR ?1 = s.type = ?1)
 这里的0只是所有对象的预定义,因此随时可以更改,我在使用带有Hibernate的JPA存储库进行过滤时需要此设置。由于准备好的语句的安全性,因此您无法按照上一个答案的建议进行医学操作。 ?1对应于:

  Page<Something> filterSometing(Long type,Pageable pageable);

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

我在开发动态组成查询时遇到了这个问题。 简而言之,这是我的解决方案:

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

这适用于NULL值,实际上与空WHERE语句相同。我使用方括号以保持使用AND运算符添加更多WHERE选项的能力。

这意味着:

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"

等于此:

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

所以我可以制作一个查询模板:

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

并将ANY (SELECT distinct column) OR column IS NULL)设置为{{filter_value}}的默认值

答案 11 :(得分:0)

将猫王运算符放入该字段

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

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