DB2 sql查询运行

时间:2013-08-25 09:09:45

标签: sql db2

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

我做错了什么?

2 个答案:

答案 0 :(得分: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中的列表以句点分隔。通常,它会以逗号分隔,您可以使用','代替'.'

答案 1 :(得分: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