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

如何选择多个联接表值满足选择条件的行?

朱啸
2023-03-14
问题内容

给定以下示例表架构

客户表

CustID
1
2
3

发票表

CustID InvoiceID

1       10
1       20
1       30
2       10
2       20
3       10
3       30

目的是选择InvoiceID值为10和20(非OR)的所有客户。因此,在此示例中,将返回带有CustID = 1和2的客户。

您将如何构造SELECT语句?


问题答案:

使用:

  SELECT c.custid
    FROM CUSTOMER c
    JOIN INVOICE i ON i.custid = c.custid
   WHERE i.invoiceid IN (10, 20)
GROUP BY c.custid
  HAVING COUNT(DISTINCT i.invoiceid) = 2

关键是i.invoiceid需要计数等于IN子句中参数的数量。

的使用COUNT(DISTINCT i.invoiceid)是在对帐务编号和发票编号的组合没有唯一约束的情况下-
如果没有重复的机会,则可以从查询中省略DISTINCT:

  SELECT c.custid
    FROM CUSTOMER c
    JOIN INVOICE i ON i.custid = c.custid
   WHERE i.invoiceid IN (10, 20)
GROUP BY c.custid
  HAVING COUNT(i.invoiceid) = 2


 类似资料:
  • 我们知道在Spark中有三种类型的连接——广播连接、随机连接和排序合并连接: 当小表连接大表时,使用广播加入; 当小表大于广播加入阈值时,使用随机连接; 当大表连接,并且连接键可以排序时,使用排序-合并连接; 如果存在两个大表的连接并且无法对连接键进行排序,会发生什么情况?Spark 将选择哪种联接类型?

  • 问题内容: 这是我无法弄清楚的非常基本的查询。 假设我有一个两列的表格,如下所示: 我想获取所有具有1、2和3的不同用户ID 。使用上面的示例,我要返回的唯一结果是1。我该怎么做? 问题答案: 任何人阅读本:我的答案是简单明了的,并得到了“接受”的地位,但请不要去阅读答案通过@cletus给出。它具有更好的性能。 只是大声思考一下,@ cletus所描述的编写自联接的另一种方法是: 这对您来说可能

  • 我正在使用查询与Spring数据jpa。我已经实现了自定义存储库来查找人名。人员实体如下所示: 实施的自定义存储库: 在选择表达式中,我想连接三列来构造全名。如果数据库有如下记录- 那么我想选“约翰·斯诺先生”。有什么办法可以做到吗? 我不想选择整个记录来连接值,因为实体有其他列和许多关联,加载整个记录不好。

  • 所以我正在使用PHP和MySQL制作一个简单的电影数据库。我有两张桌子: 电影 电影类型

  • 问题内容: 如何选择多个文件? 问题答案: 新答案: 在HTML5中,您可以添加属性以选择多个文件。 旧答案: 每个只能选择1个文件。如果要发送多个文件,则必须使用多个输入标签或使用Flash或Silverlight。

  • 尝试运行一些SQL而没有运气,尝试从两个条件为true的表中选择数据。 这些表是驱动程序的详细信息和位置。这两个表都有列user_id,我想根据between部分中匹配的user_id从这两个表中获取数据。(select语句工作并返回ID); 我得到的错误:致命错误:调用一个成员函数bind_param()在一个非对象在C:\xampp\htdocs\矢量\www\脚本\getDriversInR