小编典典

仅获取与联接表中的所有条目匹配的行(SQL)

sql

我有以下五个表:

  • 互联网服务提供商
  • 产品
  • 联系
  • 添加在
  • 插件/产品(多对多关系的数据透视表)。

每个产品都链接到一个ISP,每个连接都列在一个产品上。通过使用数据透视表,每个产品可以具有许多附加组件(该数据透视表仅具有2个字段,一个字段用于产品ID,一个字段用于AddOn
ID)。

我感兴趣的结果是列出的插件的每个连接(为此,我使用MySQL的GROUP_CONCAT,以逗号分隔列表的插件 名称
字段)。这样可以正常工作,查询看起来像这样:

SELECT i.name AS ispname, i.img_link, c.download, c.upload, c.monthly_price, c.link, 
GROUP_CONCAT(a.name) AS addons, SUM(pa.monthly_fee) AS addon_price
FROM isp i JOIN product p ON i.id = p.isp_id
JOIN `connection` c ON p.id = c.product_id LEFT JOIN product_addon pa ON pa.product_id = p.id AND pa.forced = 0
LEFT JOIN addon a ON pa.addon_id = a.id GROUP BY c.id

我正在使用LEFT JOINS,因为产品可能根本没有插件。

我的问题是,可以选择列出的连接必须具有的一些附加组件,这些附加组件以附加组件ID列表的形式显示,例如(1,14,237)。如果我在JOIN语句( AND
pa.addon_id IN(…)
)中将它作为附加条件放入,它将返回仅具有列出的加载项之一的所有连接,但不一定要全部。

是否有某种方法可以通过SQL返回 至少 具有所有附加组件(也可以具有附加组件)的所有连接?


阅读 147

收藏
2021-04-07

共1个答案

小编典典

GROUP BY set-of-column
HAVING SUM(CASE WHEN ISNULL(pa.addon_id, 0) IN (1,14,237) THEN 1 ELSE 0 END) = 3
2021-04-07