写一个难题,我担心它没有解释太多!
基本上我有一张桌子,我们称之为链接
链接由这些列组成(我将添加测试数据,分开查看):
linksid | folderid | link
1 1 www.example.com
2 1 www.anotherexample.com
3 2 www.example.com
4 2 www.anotherexample.com
5 2 www.auniquewebsite.com
现在我想要做的是从folderid 2获取唯一网站时,因为该文件夹中有2个链接也存在于folderid 1中 - 我想为用户创建一个建议。
到目前为止,我有:
SELECT b.folderid, b.link FROM Links b
LEFT OUTER JOIN Links a
ON a.link = b.link AND a.folderid <> b.folderid
WHERE (a.folderid = 1)
但是这个查询只会显示这些结果,因为没有选择器可以对类似的匹配做任何事情:
linksid | folderid | link
1 1 www.example.com
2 1 www.anotherexample.com
3 2 www.example.com
4 2 www.anotherexample.com
我一直在尝试其他一些选择器(比如和a.link IS null),但它们都没有带来任何结果。理想情况下,我希望获得唯一的链接,并且只有当同一文件夹中的至少2个链接与搜索到的文件夹相匹配时
我觉得我是从错误的角度接近这个,任何人都有任何提示让我朝着正确的方向前进?
答案 0 :(得分:0)
如果我理解正确,您希望folder = 2的行不存在于folder = 1中。以下是使用left outer join
的一种方法:
select l2.*
from Links l2 left outer join
Links l1
on l2.link = l1.link and
l1.folder = 1
where l2.folder = 2 and l1.link is null;
编辑:
如果你想要所有&#34;无与伦比的&#34;文件夹的链接匹配文件夹1的所有链接,然后查询更复杂。以下内容获取包含l1所有链接的文件夹,然后可能还有更多:
select l2.folder
from links l1 left outer join
links l2
on l1.link = l2.link
where l1.folder = 1
group by l2.folder
having sum(l2.link is null) = 0;
要获取不在文件夹1中的所有链接,请使用子查询和更多逻辑:
select l.*
from (select l2.folder
from links l1 left outer join
links l2
on l1.link = l2.link
where l1.folder = 1
group by l2.folder
having sum(l2.link is null) = 0
) l2 join
links l
on l2.folder = l.folder
where not exists (select 1
from links l1
where l1.folder = 1 and
l1.link = l.link
);