繁体   English   中英

DB2 sql查询运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM