【问题标题】:SQL WHERE clause: Get all rows / only matching rows based on valueSQL WHERE 子句:获取所有行/仅根据值匹配行
【发布时间】:2017-09-13 02:18:22
【问题描述】:

我在 VB.NET 中为 SQL Server 执行此操作,但我认为这是一个一般性的 SQL 问题。

我正在构建一个 SQL 查询,我想避免这样做:

Dim SQL As String = "SELECT * FROM Table"
If Not IsDbNull(Value) Then
    SQL &= " WHERE Value = " & Value
End If

有没有办法编写 WHERE 子句,如果值为 NULL,则返回查询中的所有行,否则只返回与提供的值匹配的行。

例如:

如果值为 NULL,那么结果集将是:

ID  Value  City 
1   1      New York 
2   1      London
3   2      Paris
4   4      Mumbai

如果值为 2,那么结果集将是:

ID  Value  City 
3   2      Paris

我可以编写两个单独的查询,或者像上面那样编写查询,但我想知道是否有更好的方法?

【问题讨论】:

    标签: sql sql-server vb.net


    【解决方案1】:

    您应该使用参数查询。一种方法是:

    WHERE Value = ? OR ? IS NULL
    

    我应该注意,生成的查询可能不会使用索引。因此,从性能角度来看,两个单独的查询可能会更好。

    【讨论】:

    • 我同意参数,并简化示例以节省空间。
    • OMG... 自 80 年代中期以来我一直在编写 SQL,我不敢相信我错过了这么简单的答案。谢谢戈登。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多