在Oracle SQL中将具有分组元素的两个表联接

时间:2019-03-18 13:13:54

标签: sql oracle join

所以我有以下两个表(简化了):

表1:文件夹

ID    | DESC_FOLDER | TEMPLATE_ID
---------------------------------
...   | ...         | ...
20    | Folder 1    | 52
21    | Folder 2    | 55
...   |             | ...

表2:模板

ID    | DESC_TEMPLATE | GROUP
-----------------------------
...   | ...           | ...
51    | Template 1    | abc
52    | Template 2    | abc
53    | Template 3    | abc
54    | Template 4    | abc
55    | Template 5    | NULL
...   | ...           | ...

结果应为包含所有模板及其对应文件夹的列表。

预期结果:

DESC_TEMPLATE | DESC_FOLDER 
---------------------------
Template 1    | Folder 1  
Template 2    | Folder 1
Template 3    | Folder 1
Template 4    | Folder 1  
Template 5    | Folder 2

我对分组模板有问题,因为每个组中只有一个模板连接到该文件夹​​。以下sql命令显然仅返回直接连接到该文件夹​​的模板。如何扩展我的命令以获得所需的输出?

Select 
    T.DESC_TEMPLATE, 
    F.DESC_FOLDER
from 
    TEMPLATES T, 
    FOLDERS F
where
    T.ID = F.TEMPLATE_ID

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我认为窗口功能可以解决您的问题:

Select T.DESC_TEMPLATE, 
       MAX(F.DESC_FOLDER) OVER (PARTITION BY t.GROUP) as DESC_FOLDER
from TEMPLATES T left join
     FOLDERS F
     on T.ID = F.TEMPLATE_ID;

答案 1 :(得分:-1)

where
    T.ID = F.TEMPLATE_ID (+)