0

我对分层查询有疑问,以下查询在 Oracle 中有效,但在 DB2 中无效

如果我们从芝加哥开始旅程,它将检索可能的目的地。

SELECT   origin, departure, arrival
FROM  schema001."FLIGHTS"
START WITH departure = 'Chicago'
CONNECT BY PRIOR arrival = departure;

任何人都可以帮助我,我们如何在 DB2 中编写查询

在此先感谢拉杰什

4

3 回答 3

1

您可以使用递归公用表表达式。

像这样的东西:

with ftree (origin, departure, arrival) as (
   select origin, 
          departure, 
          arrival
   from flights
   where departure = 'Chicago'
   union all
   select c.origin,
          c.departure,
          c.arrival
   from flights c
      join ftree p on c.arrival = p.departure
)
select *
from ftree;

(未测试,目前手头没有 DB2)

于 2013-04-24T06:56:39.930 回答
1

干杯....我得到了解决方案,工作解决方案是....

WITH rajesh(departure, arrival) AS 
(
select departure, arrival from ALERTS_TEST.flights where departure = 'Chicago'
    UNION ALL
select nplus1.departure, nplus1.arrival  from ALERTS_TEST.flights as nplus1, rajesh
    WHERE rajesh.arrival = nplus1.departure
) 
SELECT departure, arrival FROM rajesh;

我已经在 db2 v9.7 和 sqlserver 2005 中检查了上述查询。它工作正常...感谢您的帮助 a_horse_with_no_name

于 2013-04-24T10:09:44.300 回答
0

您没有提到 DB2 在哪个操作系统上运行。

在 IBM i OS 7.1 上运行的 DB2 for i确实具有分层查询,但语法略有不同。

SELECT   origin, departure, arrival
  FROM  schema001.FLIGHTS
  START WITH departure = 'Chicago'
  CONNECT BY arrival = PRIOR departure;

不幸的是,我不相信这将适用于 DB2 for LUW 或 z/OS。也许在未来的版本中。

于 2013-04-24T16:48:34.113 回答