![](/img/trans.png)
[英]SQL query question: get data from table1 that are not in table2 while table2 is having 2 conditions
[英]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.