我有一个在结果集上使用bit_or的mysql查询。如果没有结果集,则bit_or函数返回0(根据mysql文档,这是正确的)。
例如:
select n from t1 where a=1;
不返回任何行。
select bit_or(n) from t1 where a=1;
返回0
我需要强制最后一个查询而不是从bit_or查询返回结果,例如(在伪代码中,因为我不知道正确的调用):
select bit_or(n) unless 0 from t1 where a=1;
有人知道我怎么做吗? (澄清一下,我需要外部程序的“无结果为0”返回值,遗憾的是无法更改)。
答案 0 :(得分:3)
您可以使用case
语句将null
排除在行之外,如下所示:
select
case
when bit_or(n) = 0 then null
else bit_or(n)
end
from
t1
where
a=1
或者,如果您想完全忽略该行,可以在having
子句中执行此操作:
select
bit_or(n)
from
t1
where
a=1
having
bit_or(n) <> 0
having
子句主要用于对聚合列(例如where
或sum
)执行max
。在这种情况下,您的汇总列为bit_or
。如果结果集中有其他列,则需要将它们包含在group by
子句之后where
子句中,但在having
子句之前。
第一个示例将为该行返回null
,而如果bit_or(n)
为0,则第二个示例将不返回该行。
答案 1 :(得分:0)
SELECT *
FROM (
SELECT BIT_OR(`n`) AS `bit`
FROM `t1`
WHERE `a` = 1
) AS `bit`
WHERE `bit`