强制mysql在bit_or上没有返回结果

时间:2009-08-28 12:28:30

标签: sql mysql

我有一个在结果集上使用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”返回值,遗憾的是无法更改)。

2 个答案:

答案 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子句主要用于对聚合列(例如wheresum)执行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`