【问题标题】:sql query if parameter is null select allsql查询如果参数为空全选
【发布时间】:2012-11-20 13:24:40
【问题描述】:

如果? 为空,是否可以修改以下查询以返回所有记录?

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?;

【问题讨论】:

  • 这让我更加讨厌 T-SQL...

标签: sql parameters where-clause


【解决方案1】:

试试这个:

SELECT * 
FROM MY_TABLE 
WHERE @parameter IS NULL OR NAME = @parameter;

【讨论】:

  • 如何在 PHP 中使用这个?
  • @prograshid - 只需在 PHP 中执行查询
  • 我试图执行查询字符串,但在访问结果时给出了它。说未定义的函数调用 fetch_assoc
  • @prograshid 这与 MySQL 无关,您的 php 代码有问题。只需在这里提出一个新问题。
  • 如果您碰巧有其他谓词(某些东西),我会添加括号以确保评估顺序是您想要的 [参见stackoverflow.com/questions/1241142/…] 例如:WHERE something AND (@parameter IS NULL OR NAME =@参数)
【解决方案2】:

您还可以使用函数IFNULL,COALESCE,NVL,ISNULL 来检查空值。这取决于您的 RDBMS。

MySQL

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = IFNULL(?,NAME);

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = COALESCE(?,NAME);

甲骨文

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = NVL(?,NAME);

SQL Server / SYBASE

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ISNULL(?,NAME);

【讨论】:

  • 如果NAME 中有空值,这将不起作用。但是对于不可为空的列,这是要走的路=)(编辑:至少在 SQL Server 中没有)
  • 请注意,当参数为 null 时,这会产生比将 SQL 调节为不包含 where 子句的更慢的查询。
【解决方案3】:

下一个。查询将处理名称(表列值)也可以为 NULL 的情况:

SELECT NAME, SURNAME FROM MY_TABLE WHERE COALESCE(NAME,'') = COALESCE(?,NAME,'');

【讨论】:

    【解决方案4】:
    SELECT NAME
    FROM MY_TABLE
    WHERE NAME LIKE CASE WHEN ? IS NOT NULL THEN ? ELSE '%' END
    

    这将完美地工作,但它只会返回非空值。

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2018-09-01
      相关资源
      最近更新 更多