所以,我在MySQL中有一个名为"Inventory"的中间表,它有两个PK:idMovie和idSubary。那张表是这样的:
----------------------------------
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相同。
但是,前面显示的查询不起作用。基本上,该查询查找Inventory上的SubaryID对,然后运行嵌套查询来查找第一个子公司是否有第二个子公司没有的电影。如果没有,则同时选择两者。
但是,嵌套查询不起作用。正如我所说,我想在没有内部的情况下对同一张表进行左联接。
非常感谢您的帮助:(
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。这些是复制品。