【问题标题】:SQL 'WHERE' retrieve all data from a filterSQL 'WHERE' 从过滤器中检索所有数据
【发布时间】:2021-10-03 10:08:19
【问题描述】:

使用此查询:

SELECT * 
FROM table1 
WHERE name = 'Peter'

我可以从 table1 检索 Peter 的所有数据。这可以使用“通配符 *”来完成。

问题

WHERE 部分是否有任何类型的通配符?例如:

SELECT * 
FROM table1 
WHERE name = *

此选项当然不起作用,但我正在那里寻找通配符,以便所有名称都包含在我的查询中。我知道删除WHERE 语句更容易,但由于某些原因我仍然需要它。

【问题讨论】:

  • 一种方法(虽然没有通配符)==> SELECT * FROM table1 WHERE name IS NOT NULL;
  • 但我只需要替换“Peter”,所以我的代码中仍然有“=”。所以这是行不通的,因为最后我会有:=“IS NOT NULL”。

标签: sql if-statement where-clause wildcard


【解决方案1】:
SELECT * 
FROM table1 
WHERE True OR name = 'Peter'
;

这可能看起来很傻,但它可以在生成查询字符串时派上用场,例如在 PHP/PDO 中:


$query = "SELECT * FROM names
     WHERE ($ignore_name OR name = :the_name)
     AND ($ignore_address OR address LIKE :the_address)";

,其中$ignore_xxx 变量是TrueFalse,完全由您控制(不是用户输入!)

【讨论】:

  • 虽然我已经多次看到这种策略,但它的性能会显着下降。如果性能很重要,最好使用动态 SQL。
  • 就是这样。谢谢!
  • @TheImpaler in postgres,不变量条件由查询生成器在准备查询时检测。
【解决方案2】:
select * 
from table1 
where name = 'Peter' or name = name;

【讨论】:

    【解决方案3】:

    您可以像这样在 WHERE 子句中查询输出:

    SELECT *
    FROM table1
    WHERE [name] IN (SELECT DISTINCT [name]
                        FROM table1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多