You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DB2 SQL:如何用单查询返回用户ID在多表的存在状态(1/0)

DB2单条SQL查询用户ID在多表中的存在状态

当然可以,以下两种常见场景的SQL写法供你参考:

场景1:查询指定单个用户ID的存在状态

如果要针对某个特定用户ID(示例中:target_userid为待查询的参数),可以结合EXISTS子查询与DB2内置虚表SYSIBM.SYSDUMMY1生成一行结果:

SELECT
    CASE WHEN EXISTS (SELECT 1 FROM t1 WHERE userid = :target_userid) THEN 1 ELSE 0 END AS t1_exists,
    CASE WHEN EXISTS (SELECT 1 FROM t2 WHERE userid = :target_userid) THEN 1 ELSE 0 END AS t2_exists,
    CASE WHEN EXISTS (SELECT 1 FROM t3 WHERE userid = :target_userid) THEN 1 ELSE 0 END AS t3_exists,
    CASE WHEN EXISTS (SELECT 1 FROM t4 WHERE userid = :target_userid) THEN 1 ELSE 0 END AS t4_exists
FROM SYSIBM.SYSDUMMY1;

EXISTS的优势是查询效率高,只要找到匹配记录就停止扫描表,适合数据量较大的场景。

场景2:查询所有出现过的用户ID的存在状态

如果要统计所有在任意表中出现过的用户ID的状态,先通过UNION收集所有唯一用户ID,再逐个判断各表的存在性:

WITH all_userids AS (
    SELECT userid FROM t1
    UNION
    SELECT userid FROM t2
    UNION
    SELECT userid FROM t3
    UNION
    SELECT userid FROM t4
)
SELECT
    au.userid,
    CASE WHEN EXISTS (SELECT 1 FROM t1 WHERE t1.userid = au.userid) THEN 1 ELSE 0 END AS t1_exists,
    CASE WHEN EXISTS (SELECT 1 FROM t2 WHERE t2.userid = au.userid) THEN 1 ELSE 0 END AS t2_exists,
    CASE WHEN EXISTS (SELECT 1 FROM t3 WHERE t3.userid = au.userid) THEN 1 ELSE 0 END AS t3_exists,
    CASE WHEN EXISTS (SELECT 1 FROM t4 WHERE t4.userid = au.userid) THEN 1 ELSE 0 END AS t4_exists
FROM all_userids au;

UNION会自动去重,确保每个用户ID只出现一次,避免重复统计。

注意:将上述SQL中的t1、t2、t3、t4替换为你实际的表名即可。

内容的提问来源于stack exchange,提问作者jauntyCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:35:07