繁体   English   中英

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

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

这可能很容易,但是在网上查看内容后我感到困惑。 我的Contract表中的每个项目都有多个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或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表中获取所有列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM