我遇到了一个查询来创建像这样的虚拟表
CREATE TABLE destination AS
SELECT level AS id,
CASE
WHEN MOD(level, 2) = 0 THEN 10
ELSE 20
END AS status,
'Description of level ' || level AS description
FROM dual
CONNECT BY level <= 10;
SELECT * FROM destination;
1 20 Description of level 1
2 10 Description of level 2
3 20 Description of level 3
4 10 Description of level 4
5 20 Description of level 5
6 10 Description of level 6
7 20 Description of level 7
8 10 Description of level 8
9 20 Description of level 9
10 10 Description of level 10
10 rows selected.
您能否分享一些有关其如何运作的见解?首先,PRIOR
的缺失对我来说并不为人所知。其次,我不了解树的构造方式。从级别来看,它们看起来都是从同一个根分支出来的。
答案 0 :(得分:4)
这个噱头被DB专业人士Mikito Harakiri注意到,并在AskTom上分享。它已经在Oracle社区中被采用,虽然它没有文档(它实际上违背了文档),并且它的使用有点危险,因为Oracle可能在某些时候使它不再起作用。 (虽然已经大量使用,但甲骨文收回它将是疯狂的。)
这些行确实是从同一个根分支出来的,双行是单行。您可以使用任何其他具有完全一行的表来执行相同的操作。如果你从两行开始(或者你在自己的表上使用这个技巧,有很多行),你很快就会遇到麻烦。有很多方法,随着时间的推移你会选择它。您可能有兴趣关注Oracle论坛,在OTN,人们会一直使用这个技巧。
以下是一篇讨论此技巧的文章:http://www.sqlsnippets.com/en/topic-11821.html