当前位置: 首页 > 面试题库 >

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

钱雅逸
2023-03-14
问题内容

我有以下五个表:

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

每个产品都链接到一个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返回 至少 具有所有附加组件(也可以具有附加组件)的所有连接?


问题答案:
GROUP BY set-of-column
HAVING SUM(CASE WHEN ISNULL(pa.addon_id, 0) IN (1,14,237) THEN 1 ELSE 0 END) = 3


 类似资料:
  • 我有以下数据框: 我正在尝试为这个熊猫数据框确定适当的语法,如何为列“通道”等于A或B的所有实例编制索引。一旦找到所有实例,我想打印出来。此外,我希望能够在脚本中调用每个索引以获得进一步的应用程序。 我希望显示器是: 然后我想有一个“for循环”,它遍历并分别打印出每个索引实例,这样就很容易识别并单独调用它们,以便在脚本中进一步使用。有人能给点建议吗?

  • 问题内容: 我有两张桌子。表和表。两者都有多对多的关系。 表A: 表B: 表AB: 我想要得到的名单,从表S =该有关系 的名单表第。 上表中的示例: 我想所有这些都表的关系小号 1和2,我得到那么3具有这两个表第。 如何使用SQL查询做到这一点? 问题答案: 如果要基于“不作为”列表(而不是“全部”作为)进行选择,请按照以下步骤操作: 用您的列表替换,并在having子句中替换为列表项的数量。

  • 问题内容: 如何获取将与证书()匹配的所有主机名和IP的列表,包括主题备用名称?我只发现了的各种实现。 问题答案: 主机名验证与证书的绑定方式在RFC 2818第3.1节中 定义(对于HTTPS,对于其他协议,请参阅RFC 6125 ,但非常相似)。 简而言之: 使用的实例,并遍历的结果。 每个条目将是一个2元素列表。第一个是类型,第二个是实际值。 类型2用于DNS名称,类型7用于IP地址。您需要

  • 问题内容: 这是我的桌子: 每篇文章可以具有一个或多个与之关联的图像。我想在页面上显示最后40篇书面文章,以及与该文章相关的最新图像。我不知道的是如何与article_images表联接,并且仅检索单个行。 编辑:解决方案必须表现良好,这一点很重要。到目前为止,我所看到的解决方案(使用派生表)需要一分钟或更长时间才能完成。 问题答案: 在查看了其他答案之后,它帮助我意识到了一个潜在的问题。 Art