标题很难写,我担心它没有解释太多!
基本上我有一个表,我们称它为链接
链接由这些列组成(我将添加测试数据,分开查看):
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
我一直在尝试其他一些选择器(比如 and a.link IS null),但它们都没有结果。理想情况下,我希望获得唯一链接,并且仅当同一文件夹中的至少 2 个链接与搜索来源文件夹匹配时
我觉得我从错误的角度来处理这个问题,有人有任何提示可以将我推向正确的方向吗?
最佳答案
如果我理解正确,您需要 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;
编辑:
如果您想要文件夹的所有“不匹配”链接与文件夹 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
);
关于mysql - 使用 mySQL join 来选择喜欢的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23152345/