![]() |
1
19
你可以在没有案子的情况下这样做:
|
![]() |
2
5
如果不使用动态SQL,最有效的选项是:
使用动态SQL:
当心
|
![]() |
3
2
如何:
|
![]() |
4
2
甚至比andomar的答案更简单,并且假设id永远不是0(对于大多数自动递增id来说)
当@teamid为零时,该谓词始终为true,否则仅当它与特定行的teamid匹配时才为true。 不过,请注意:这在Sybase 11或更高版本上非常有效;在MS SQL Server 2003上非常无效;我不知道它在当前版本的MS SQL Server上是如何工作的。 另外,您可以使用case;您只需将case放在where子句中,而不是放在case中的where子句中。所以你最初的问题是:
不过,请注意,这可能效率较低,因为必须对每行进行评估,而且还可能导致全表扫描。 我上面给出的表单更有可能被智能查询优化器重写(您的里程数取决于您的rdbms),以便在@teamid不为零时使用索引。 |
![]() |
5
0
如果可以将空视为所有记录:
|
![]() |
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 2 年前 |
![]() |
Nick Fleetwood · 调度语法的LINQ查询 3 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 3 年前 |
![]() |
Java · 使用交叉应用同时显示两列 3 年前 |