小编典典

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

sql

给定以下示例表架构

客户表

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语句?


阅读 150

收藏
2021-04-14

共1个答案

小编典典

使用:

  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
2021-04-14