因此,我在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没有的电影。如果没有,则同时选择两者。
但是,嵌套查询不起作用。就像我说的,我想对同一张表进行左连接而没有内部部分。
非常感谢您的帮助:)
答案 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集与这些电影完全相同。那些是重复的。