2009-07-25 52 views
0

我有一个问题,从链接表中选择并过滤掉多余的结果。MySQL - 从链接表中获取元素,但只有这些元素

出版物package_publications表的方式属于

例如,我知道我的出版物的ID是11和47.我想返回一个只包含这些出版物的包。

现在,如果我明显的内连接后做一个连接,并完成类似where publications.id IN (11, 47),这将简单地返回具有这些值在package_publications链接表一方所有包。

我想匹配只有两个包(或更多 - 它不限于两个)的包。当我需要AND时,实际上我使用的是OR,但我不知道如何通过SQL进行处理。

回答

0

你最好打赌是一个相关的子查询。另一种方法是使用distinct/group加入,但不能很好地执行,特别是在更大的表格上。

子查询:

SELECT * FROM `packages` 
WHERE 2 = (
    SELECT count(*) FROM `package_publications` 
    WHERE `packages`.id = `package_publications`.package_id 
     AND `package_publications`.publication_id IN (11, 47) 
) 
0

由于有在他们两人发布ID的包将在结果集中,你可以用它来过滤重复出现。这不是非常有效,但可以解决问题,直到找到更好的解决方案。

SELECT * FROM packages WHERE packages.id IN (
    SELECT package_publications.package_id 
    WHERE package_publications.publication_id IN (11,47) 
    GROUP BY package_publications.package_id 
    HAVING COUNT(package_publications.package_id) = 2 
)