mysql - 使用 mySQL join 来选择喜欢的信息

标签 mysql sql

标题很难写,我担心它没有解释太多!

基本上我有一个表,我们称它为链接

链接由这些列组成(我将添加测试数据,分开查看):

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/

相关文章:

mysql - 如何在 Sequel Pro 中编辑现有索引?

php - 使用 where in 条件和最新时间​​戳连接两个 MySQL 查询

mysql - mysql可以处理50gb的数据集吗?

php - 列出数据库中最常见电子邮件后缀的 SQL 代码

MySQL 4.1 密码

sql - 帮助用更好的代码替换这个 SQL 游标

php - Laravel Mysql DB 加入 2 个多态父类

php - 如何在 Laravel 5.5 中同时使用 GroupBy 和 OrderBy

mysql - 在 mysql 中使用 group by 的平均值

java - map 集合中的多个值作为键