我在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上使用该语法没有问题......
答案 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;