我很困惑,我们可以在 FROM 子句中编写SELECT语句,如果是,为什么会这样。
SELECT v.employee_id, v.last_name, v.lev
FROM
(SELECT employee_id, last_name, LEVEL lev
FROM employees v
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id) v
WHERE (v.employee_id, v.lev) IN
(SELECT employee_id, 2 FROM employees);
答案 0 :(得分:1)
我认为你在sql server中寻找一个递归的cte,就像......
WITH X (employee_id, last_name, lev )
AS (
SELECT employee_id, last_name, 0 AS lev
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.employee_id, e.last_name , lev + 1
FROM employees e
INNER JOIN x ON x.employee_id = e.manager_id
)
SELECT v.employee_id, v.last_name, v.lev
FROM X
WHERE lev = 2
答案 1 :(得分:1)
可能有多种原因。在from子句中编写任何选择查询都会创建内联视图。
这是我能想到的,
查看我的前n个查询的答案。
How do I limit the number of rows returned by an Oracle query after ordering?
答案 2 :(得分:1)
答案是肯定的,你可以使用。 from中的select子句将充当内联视图(将其视为数据库创建以保存结果的临时表)。 例如:
SELECT sdt sdat
FROM (SELECT SYSDATE sdt FROM dual);
在上面的查询中,首先执行SELECT SYSDATE sdt FROM dual,输出如下:
sdt
---
08-Dec-2016 16:20:56
然后,使用它作为临时表(在这种情况下称为内联视图),oracle将对此数据执行外部选择。因此SELECT sdt FROM ...执行,最终输出为:
sdat
----
08-Dec-2016 16:20:56