【问题标题】:How to prioritize in OR condition in SQL Server如何在 SQL Server 中的 OR 条件中确定优先级
【发布时间】: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 子句类似的东西...如果没有找到结果,则搜索一个范围然后搜索第二个范围...我该怎么做???

【问题讨论】:

  • 现在我希望对操作符之间做同样的事情......如果没有找到第一个范围的值,那么只能按第二个范围过滤..我该怎么做?

标签: sql sql-server sql-server-2008 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 2013-03-30
    • 2014-05-04
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多