如何在 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')
我有一个简单的查询,我想在其中搜索列中的值,如果未找到匹配项,那么我想丢弃 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')