[英]DB2 sql query run
试图为DB2运行一些查询,但没有结果。
SELECT APPLICATION_ID,
CLIENT_WRKSTNNAME
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t
WHERE APPLICATION_ID IN (SELECT ''''||APPLICATION_ID||''''
FROM SYSIBM.SYSDUMMY1)
问题出在WHERE子句中的子查询中。 如果我只运行
SELECT ''''||APPLICATION_ID||''''
FROM SYSIBM.SYSDUMMY1
部分并将结果复制/粘贴到大查询中-我将获得所需的结果。 子查询的结果如下所示: '92.81.111.13.51632.13022516453'
,它必须是String / varchar。
我究竟做错了什么?
您的查询没有意义。 这是带有表别名的版本:
SELECT t.APPLICATION_ID, t.CLIENT_WRKSTNNAME
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t
WHERE t.APPLICATION_ID IN (SELECT ''''||t.APPLICATION_ID||'''' FROM SYSIBM.SYSDUMMY1);
一种可能性是正在将字段APPLICATION_ID
与自身进行比较,并带有引号。 SYSIBM.SYSDUMMY1
没有名为APPLICATION_ID
的列。 因此,此查询等效于:
SELECT t.APPLICATION_ID, t.CLIENT_WRKSTNNAME
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t
WHERE t.APPLICATION_ID = ''''||t.APPLICATION_ID||'''' ;
另一种可能性是APPLICATION_ID
是变量。 在这种情况下,应将变量命名为v_APPLICATION_ID
之类的名称,以免将其与列名混淆。
您似乎想要以下内容:
WHERE '.'||t.APPLICATION_ID||'.' like '%.'||v_APPLICATION_IDS||'.%' ;
假设v_APPLICATION_IDS
的列表由句点分隔。 通常,它将用逗号分隔,并且您将使用','
而不是'.'
。
WITH s AS (SELECT APPLICATION_ID AS application_id FROM SYSIBM.SYSDUMMY1)
SELECT CLIENT_WRKSTNNAME
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t
INNER join s as s on s.application_id=t.APPLICATION_ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.