在DB2上的SELECT子句中使用EXISTS的问题

时间:2014-07-21 11:39:45

标签: sql db2 exists

我在SELECT子句中使用EXISTS语句有一点问题。我有表ITEM和SUBITEM,如果存在任何给定类型的子项,我想返回布尔标志:

SELECT item.id, item.f1, item.f2, item.f3,
    EXISTS(select sub.id from schema.subitem sub where sub.item_id = item.id
      AND type='standard') as has_standard
    FROM schema.item item

但是,我收到错误消息:

  

错误:[IBM] [CLI驱动程序] [DB2] SQL0104N意外的令牌"。"是   发现以下"。"。预期的代币可能包括:",)"。   SQLSTATE = 42601 SQLState:42601 ErrorCode:-104

示例被简化,表名不是真实的,它只是在DB2上询问EXISTS子句语法的一个例子。据我所知,在PostgreSQL或Oracle上使用该语法没有问题......

2 个答案:

答案 0 :(得分:8)

在其周围加上case语句:

SELECT item.id, item.f1, item.f2, item.f3,
       (case when EXISTS (select sub.id
                          from schema.subitem sub
                          where sub.item_id = item.id AND type='standard'
                         )
             then 1 else 0
        end) as has_standard
FROM schema.item item;

答案 1 :(得分:0)

SELECT item.id, item.f1, item.f2, item.f3, 
CASE when (select '1' from  schema.subitem sub
where sub.item_id = item.id AND type='standard')= '1' 
then '1' else '0' end has_standard from schema.item item;