0

尝试对 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。

我究竟做错了什么?

4

2 回答 2

0

您的查询没有意义。这是带有表别名的版本:

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以句点分隔。通常,它会用逗号分隔,你会使用','而不是'.'.

于 2013-08-25T11:58:06.597 回答
0
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
于 2013-08-25T12:11:33.683 回答