sql - COALESCE 在 Where 子句中?

标签 sql sql-server-2008 stored-procedures

有没有一种好的方法可以在 SQL 中表达,如果列匹配则选择特定行,否则选择更一般的行?像这样的东西:

SELECT name FROM names 
            WHERE (colA = @colA OR colA = 'ALL') 

我只希望它返回一个特定的记录(如果它存在),否则如果找不到特定的列匹配则返回通用的“ALL”记录。似乎 COALESCE 与我正在寻找的类似,但我不知道它在语法上如何工作。

最佳答案

@Blorgbeard 的回答(使用 top 1 和 order by)可能是最好的方法,但为了与众不同,您也可以使用子查询而不存在:

SELECT name FROM names 
WHERE (colA = @colA) OR (colA = 'ALL' AND NOT EXISTS(
                                                SELECT name FROM names 
                                                WHERE colA = @colA)) 

我猜它的“优势”是它使用了更标准的 sql。

关于sql - COALESCE 在 Where 子句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623332/

相关文章:

php - 如何防止 PHP 中的 SQL 注入(inject)?

sql - 在数据库中的所有行上调用触发器

sql - 获取事务中插入的记录数

sql-server-2008 - VIsio 2010 无法 'see' 文件 DSN

sql - 非规范化数据(也许是一个枢轴?)

postgresql - postgres (8.3),在函数中使用查询结果

php - 这个简单的 SQL 查询中有什么语法错误?

mysql - 如何使用给定的正则表达式格式检查 sql 查询中用户输入的格式?

sql - 通过存储过程将数据插入SQL后返回字符串

sql-server - 嵌套的插入exec解决