我在从链接表中选择并过滤掉多余的结果时遇到问题。
出版物通过 package_publications 表属于包。
例如,我知道我的出版物的标识是11和47.我想要返回一个只包含那些出版物的包。
现在,如果我在明显的内连接之后进行连接并执行where publications.id IN (11, 47)
之类的操作,则只返回在 package_publications 链接表中具有其中一个值的所有包。
我想匹配只有两个(或更多 - 不限于两个)的软件包。实际上,当我想要一个AND时,我正在使用OR,但我不知道如何以SQL方式处理它。
答案 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
)