一尘不染

在where子句中的COALESCE?

sql

如果列匹配,是否有很好的方法在SQL中表示选择特定的行,否则选择更通用的行?就像是:

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

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


阅读 330

收藏
2021-03-08

共1个答案

一尘不染

@Blorgbeard答案(使用前1个和排序依据)可能是最好的方法,但只是有所不同,您还可以使用子查询,但不存在:

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

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

2021-03-08