SQL 初学者 - 如何从 Table1 中获取与 Table2 中至少 10 个项目关联的项目

SQL Beginner - How to get items from Table1 that are associated with at least 10 items in Table2

这个应该是很容易的,但是网上看的时候有点懵。我的 Contract table 中的每个项目都有多个 Envelopes。我想找到至少有 10 个信封的合同。我该怎么做?

我尝试了以下方法

select c.*, COUNT(e.ID)  
from [Contract] c
INNER JOIN Envelope e ON e.ContractID = c.ID
Group By c.ID
HAVING Count(e.ID) > 10

然后我得到

Column 'Contract.PresenterUserID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

之前没有接触过aggregate or group by子句,所以不太清楚是什么意思。

你很接近。您必须在选择聚合函数或 GROUP BY 子句中包括所有字段。试试这个:

select c.id, c.PresenterUserID, COUNT(e.ID)  
from [Contract] c
INNER JOIN Envelope e ON e.ContractID = c.ID
Group By c.ID, c.PresenterUserID
HAVING Count(e.ID) >= 10

默认情况下,MySQL 将接受您的查询。因此,我假设您没有使用 MySQL 或系统已打开完整组。

这是另一种适用于任何数据库的方法:

select c.*, e.cnt
from [Contract] c inner join
     (select e.ContractId, count(*) as cnt
      from Envelope e
      group by e.ContractId
      having count(*) >= 10
     ) e
     on e.ContractID = c.ID;

这会将聚合移动到连接之前的子查询。然后,您可以从 contract table.

中获取所有列