Os problemas com a utilização existem na cláusula de selecção do DB2

Tenho um pequeno problema em usar a instrução existe na cláusula de selecção. Tenho o ITEM e sub-item das tabelas e quero devolver a bandeira booleana se existir algum sub-item de dado Tipo:

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

No entanto, percebo a mensagem de erro:

erro: [IBM] [CLI Driver] [DB2] SQL0104N um token inesperado"." era encontrado a seguir".". Os tokens esperados podem incluir:",)". SQLSTATE=42601 SQLState: 42601 ErrorCode: -104

o exemplo é simplificado e os nomes das tabelas não são reais, é apenas um exemplo para pedir a sintaxe para a cláusula existe em DB2. Tanto quanto me lembro, não tive problemas em usar essa sintaxe no PostgreSQL ou Oracle...

Author: Danubian Sailor, 2014-07-21

1 answers

Coloque uma declaração case à volta disto:

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;
 7
Author: Gordon Linoff, 2014-07-21 11:42:11