如何在 SQL 服务器中确定 OR 条件的优先级

How to prioritize in OR condition in SQL Server

我有一个简单的查询,我想在其中搜索列中的值,如果未找到匹配项,那么我想丢弃 where 条件和 select 该列中的任何随机值。

我曾尝试使用 OR 条件、用例来实现此目的,但无济于事

select top 10 * 
from tblRFCWorkload 
where (f1 ='mbb' or f1 = f1)

在上面的查询中,我希望结果 table 包含所有带有 'mbb' 的行,如果未找到 'mbb',则提供任何值而不是 mbb。但它 returns 只有两行带有 mbb,即使有 10 行匹配

select top 10 *
from tblRFCWorkload
where 1 = case when f1 = 'mbb' then 1 else 1 end

此查询也returns与第一个查询

相同的结果

如果我把它改成

select top 10 *
from tblRFCWorkload
where 1 = case when f1 = 'mbb' then 1 else 0 end

那么它只有具有 mbb 值的行。

需要与 between 子句类似的东西...如果没有找到结果则搜索一个范围然后搜索第二个范围...我该怎么做???

我想你想要这样的东西:

select top 10 *
from tblRFCWorkload
order by (case when f1 = 'mbb' then 1 else 2 end);

这会对您想要的行进行优先排序,获取前 10 个 'mbb',如果它们可用的话。

您只想要 f1 = 'mbb' 的结果(如果有的话),否则什么都没有?在这种情况下,您需要测试是否有任何匹配的行。像这样

SELECT TOP 10 *
FROM tblRFCWorkload 
WHERE f1 = 'mbb'      --the match you need
OR NOT EXISTS         --or there are no matches
    (SELECT * FROM tblRFCWorkload WHERE f1 = 'mbb')