如何在 SQL Server 中的 OR 条件中确定优先级
Posted
技术标签:
【中文标题】如何在 SQL Server 中的 OR 条件中确定优先级【英文标题】:How to prioritize in OR condition in SQL Server 【发布时间】:2015-07-15 10:47:35 【问题描述】:我有一个简单的查询,我想在列中搜索一个值,如果没有找到匹配项,那么我想丢弃 where 条件并从该列中选择任何随机值。
我尝试使用OR
条件,使用案例来实现这一点,但无济于事
select top 10 *
from tblRFCWorkload
where (f1 ='mbb' or f1 = f1)
在上面的查询中,我希望结果表的所有行都带有“mbb”,如果没有找到“mbb”,则给出任何值而不是 mbb。但是,即使有 10 行匹配,它也只返回两行 mbb
select top 10 *
from tblRFCWorkload
where 1 = case when f1 = 'mbb' then 1 else 1 end
此查询也返回与第一个查询相同的结果
如果我把它改成
select top 10 *
from tblRFCWorkload
where 1 = case when f1 = 'mbb' then 1 else 0 end
那么它只有具有 mbb 值的行。
需要与 between 子句类似的东西...如果没有找到结果,则搜索一个范围然后搜索第二个范围...我该怎么做???
【问题讨论】:
现在我希望对操作符之间做同样的事情......如果没有找到第一个范围的值,那么只能按第二个范围过滤..我该怎么做? 【参考方案1】:我想你想要这样的东西:
select top 10 *
from tblRFCWorkload
order by (case when f1 = 'mbb' then 1 else 2 end);
这会优先处理您想要的行,获取前 10 个行,即 'mbb'
(如果可用)。
【讨论】:
@rashminashaikh 如果它解决了您的问题,请随时接受这个答案。【参考方案2】:您只想要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')
【讨论】:
以上是关于如何在 SQL Server 中的 OR 条件中确定优先级的主要内容,如果未能解决你的问题,请参考以下文章
数据库中的表总是会出现查询的数据都为null或者为空,但是数据表中确实有数据存在