从SQL语句中获取值列表

时间:2017-03-05 21:10:13

标签: sql sqlite

我不太了解如何获取引用TABLE的输入并利用它返回正确的值。

基本上,我想做的是将LEVEL-OBJECT对作为输入。

从那对中,我想从中获得一个SERIAL。

但是,由于OBJECT不是唯一的,我还希望输出包括来自OBJECT-LEVEL对的任何其他SERIAL,其中OBJECT与原始输入相同。

基本上,我需要列出一个清单,但我不知道该怎么做。

此外,在此示例中未显示,但我需要检查列表是否为NULL并从原始LEVEL遍历树,直到我有一个序列号返回。

我能够获得的是一个返回值,但如果我的输入是:

LEVEL  : D
OBJECT : 2

我应该得到:

X2, X3

TABLE:

LEVEL(UNIQUE) | OBJECT | PARENT | ROOT | SERIAL

     A        | NULL   |  NULL  |  A   |  NULL

     B        | NULL   |   A    |  A   |  NULL

     C        |   1    |   B    |  A   |  X1

     D        |   2    |   C    |  A   |  X2

     E        |   2    |   D    |  A   |  X3

这是我使用的基础,我尝试了25种不同的方法来获取结果列表,但无济于事:

 SELECT Serial FROM Object AS Output
 WHERE (LEVEL = 'E' AND OBJECT = 2);

1 个答案:

答案 0 :(得分:0)

要获取具有相同Object的所有行的值,请仅对其进行过滤(WHERE Object = ?)。 要搜索非NULL序列,您需要使用recursive common table expression向上移动树,直到找到有效的序列:

WITH RECURSIVE Output AS (
  SELECT Level, Parent, Serial
  FROM Object
  WHERE Object = 2

  UNION ALL

  SELECT Object.Level, Object.Parent, Object.Serial
  FROM Object
  JOIN Output ON Object.Level = Output.Parent
  WHERE Output.Serial IS NULL
)
SELECT Serial         -- use DISTINCT to avoid duplicates
FROM Output
WHERE Serial IS NOT NULL;