MySQL - 从链接表中获取元素,但仅限于那些元素

时间:2009-07-25 12:42:06

标签: mysql join inner-join

我在从链接表中选择并过滤掉多余的结果时遇到问题。

出版物通过 package_publications 表属于

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

现在,如果我在明显的内连接之后进行连接并执行where publications.id IN (11, 47)之类的操作,则只返回在 package_publications 链接表中具有其中一个值的所有包。

我想匹配只有两个(或更多 - 不限于两个)的软件包。实际上,当我想要一个AND时,我正在使用OR,但我不知道如何以SQL方式处理它。

2 个答案:

答案 0 :(得分:0)

你最好的选择是一个相关的子查询。另一种选择是使用distinct / group by进行连接,但它不会表现良好,尤其是在较大的表格上。

子查询:

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)
 )

答案 1 :(得分: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
)