有没有一种方法可以从DB2 SQL查询返回多个结果?

goqiplq2  于 2023-10-18  发布在  DB2
关注(0)|答案(3)|浏览(178)

目前,我有4个表,其中有一个列称为userid。有没有一种方法可以编写一个查询,如果用户ID存在于表中,则返回1,如果用户ID不存在,则返回0?

An example of output would be if it exist in all tables:
if exist in TB1 = 1 
if exist in TB2 = 1
if exist in TB3 = 1 
if exist in TB4 = 1 
then returns = 1, 1, 1, 1

An example of output would be if it exist in 3 of the tables:
if exist in TB1 = 1 
if exist in TB2 = 1
if exist in TB3 = 0 
if exist in TB4 = 1 
then returns = 1, 1, 0, 1
mnemlml8

mnemlml81#

我建议写一个用户自定义函数表
https://www.idug.org/browse/blogs/blogviewer?blogkey=1c83f8d0-6f2c-43c8-8125-bbe127d88f9e
如果这不起作用,您还可以考虑编写标量udf来检查SINGLE表是否包含id。在这种情况下,你必须把表名传递给udf,然后你只需为每个需要检查的表调用udf。
希望这有帮助

093gszye

093gszye2#

令人惊讶的是,如果一行不存在,如何返回0并不明显。
如果行存在,则返回“1”,如果不存在,则不返回任何内容。

select '1' from sysibm.sysdummy1 where exists(select * from tbl1 where userid = 'MyUser');

所以你必须把上面的内容嵌入到一个语句中,这个语句将生成零来代替null。

values coalesce((select '1' from sysibm.sysdummy1 where exists(select * from tbl1 where userid = 'MyUser'))
                ,'0');

正如另一个答案所建议的那样,创建一个用户定义函数(UDF)RecordExists('MYTBL1','USERID','MyUser');可能是值得的,这取决于您需要这种功能的频率。但这超出了你的问题范围。
有几种方法可以把多个支票放在一起,这里有一个。

values (coalesce((select '1' from sysibm.sysdummy1 where exists(select * from tbl1 where userid = 'MyUser'))
                ,'0')
       , coalesce((select '1' from sysibm.sysdummy1 where exists(select * from tbl2 where userid = 'MyUser'))
                ,'0')
        );
fsi0uk1n

fsi0uk1n3#

试试这个:

with 
  tb1 (userid) as (values 1, 1, 2)
, tb2 (userid) as (values 1, 1, 2)
, tb3 (userid) as (values 2, 2, 2)
, tb4 (userid) as (values 1, 1, 2)
select 
  coalesce ((select 1 from tb1 where userid=1 fetch first 1 row only), 0) c1
, coalesce ((select 1 from tb2 where userid=1 fetch first 1 row only), 0) c2
, coalesce ((select 1 from tb3 where userid=1 fetch first 1 row only), 0) c3
, coalesce ((select 1 from tb4 where userid=1 fetch first 1 row only), 0) c4
from sysibm.sysdummy1

| C1| C2| C3| C4|
| --|--|--|--|
| 1 | 1 | 0 | 1 |
fiddle

相关问题