用于返回默认输出的union

时间:2014-05-21 21:25:09

标签: mysql sql

如果没有匹配(如果uuid和scene_id不匹配),我的查询可能不会返回任何内容。

我的查询:

select active  from likes where uuid=12 and scene_id=22

所以为了解决这个问题并在这种情况下返回0;我将其与默认值结合并添加限制1'像下面的查询;但我无法让它发挥作用!

select * from ((select active  from likes
 where uuid=12 and scene_id=22)as a 
union all
(select 0 as 'active')as b)limit 1;

它给我一个语法错误"作为b"

在这种情况下,我做错了什么?

如果您需要更多说明,请与我们联系。

2 个答案:

答案 0 :(得分:0)

我认为你过分使用了括号。这应该有效:

select
  active 
from
  (select active, 0 as importance from likes
   where uuid=12 and scene_id=22
  union all
   select FALSE, 1) x
order by importance
limit 1

请注意额外重要性列。它确保使用Active的实际值。否则,理论上可以按任何顺序返回实际行和默认行。

但我实际上同意Joe Stefanelli的评论,你的应用程序应该处理这个而不是你的查询。

示例:http://sqlfiddle.com/#!2/7cfbe3/1

答案 1 :(得分:0)

更改您的查询,如下所示(删除内部表别名)

select * 
from 
(    
select active  from likes where uuid=12 and scene_id=22

union all

select BIN(0) as 'active'
) tab limit 1;

问题是,active是比特类型,第二选择0是INT类型。只需使用BIN()函数将0转换为二进制表示。