我想编写一个查询,返回成对的图书(fèdoi,sèdoi),它们遵循以下标准:与sèdoi(第二本书)关联的关键字也都与fèdoi(第一本书)关联。
关键词
Doi Keyword
1 'Adventure'
2 'Adventure'
1 'Fantasy'
2 'Thriller'
3 'Football'
4 'Football'
5 'History'
这是我的密码:
select k1.doi f_DOI , k2.doi s_DOI, k1.keyword
from keywords k1
join keywords k2
on k2.doi > k1.doi
where k1.keyword= k2.keyword;
这是我的输出:
f_DOI s_DOI KEYWORD
1 2 Adventure
3 4 Football
第一行是不正确的,你怎么能看到fèdoi=1和sèdoi=2只有共同的'冒险'关键字,其他两个是不同的(你怎么能看到在表中关键字doi=1也有关键字'幻想'和doi=2有关键字'颤栗')。
2条答案
按热度按时间hrirmatl1#
如果我理解正确的话,你似乎希望第二个是第一个的超级集合。那就是:
如果你想要精确匹配,那么包括
k2.cnt = k.cnt
在on
条款。(假设没有重复项。)
编辑:
您可以使用以下方法获得完全相同的关键字:
或者
listagg()
方法:这可能受到oracle对字符串长度的限制。
kxeu7u2r2#
你可以用
listagg
具体如下: