查询选择电影完全相同的一对子公司的ID

时间:2018-11-15 22:57:35

标签: mysql sql database

因此,我在MySQL中有一个名为“ Inventory”的中间表,带有两个PK:idMovie和idSubsidiary。该表如下所示:

----------------------------------
idMovie (int) | idSubsidiary (int)
----------------------------------
0             | 0
2             | 0
1             | 1
3             | 2
----------------------------------

我要选择电影完全相同的一对子公司的ID。

为此,我正在考虑这样的事情:

select distinct inv1.idSubsidiary, inv2.idSubsidiary
from    inventory inv1
join    inventory inv2
on      inv1.idSubsidiary <> inv2.idSubsidiary
where not exists (

    SELECT i1.idSubsidiary, i1.idMovie , i2.idSubsidiary, i2.idMovie 
    FROM inventory i1
    INNER JOIN inventory i2 ON i1.idMovie = i2.idMovie 
    WHERE (i1.idSubsidiary= inv1.idSubsidiary and i2.idSubsidiary= inv2.idSubsidiary
    AND i2.idSubsidiary IS NULL

)

我正在寻找的结果将是这样的:

idSubsidiary | idSubsidiary
---------------------------
0            | 1
3            | 4

因此,子公司0和1在广告资源上具有相同的电影,与3和4相同。

但是,先前显示的查询不起作用。基本上,该查询在库存上查找几个SubsidiaryID,然后运行嵌套查询以查找第一个Subsidiary是否有第二个Subsidiary没有的电影。如果没有,则同时选择两者。

但是,嵌套查询不起作用。就像我说的,我想对同一张表进行左连接而没有内部部分。

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

MySQL中最简单的方法是进行双重聚合:

select movies, group_concat(idSubsidiary) as subsidiaries
from (select i.idSubsidiary, group_concat(idMovie order by idMovie) as movies
      from inventory i
      group by i.idSubsidiary
     ) s
group by movies
having count(*) > 1;

结果集中的每一行都是一组电影,其ID集与这些电影完全相同。那些是重复的。