Mysql 如何通过大量关系过滤SQL查询?

Mysql 如何通过大量关系过滤SQL查询?,mysql,sql,postgresql,Mysql,Sql,Postgresql,我对这个家庭作业问题有一些问题: 除了“仅包括至少有3个钻石矿的国家”之外,我已经成功地完成了几乎所有的查询。我想问一下如何将此部分添加到查询中 select I.state, sum(P.capacity) from Infrastructure I natural join Mine M join produces P on P.mine = M.entryno join Commodity C on C.comID = P.commodity where C.name like '%Di

我对这个家庭作业问题有一些问题:

除了“仅包括至少有3个钻石矿的国家”之外,我已经成功地完成了几乎所有的查询。我想问一下如何将此部分添加到查询中

select I.state, sum(P.capacity)
from Infrastructure I
natural join Mine M
join produces P
on P.mine = M.entryno
join Commodity C
on C.comID = P.commodity
where C.name like '%Diamond%'
group by I.state

使用
HAVING
子句来计算和断言钻石矿的数量:

SELECT
    I.state,
    SUM(P.capacity)
FROM Infrastructure I
NATURAL JOIN Mine M
INNER JOIN produces P
    ON P.mine = M.entryno
INNER JOIN Commodity C
    ON C.comID = P.commodity
WHERE
    C.name LIKE '%Diamond%'
GROUP BY
    I.state
HAVING
    COUNT(*) >= 3;

注意:自然连接对我来说似乎很容易出错,并且可能在某个点中断。最好使用显式联接。

如果您的尝试工作正常,而不是问题中提到的条件,则以下查询应该可以工作:

select I.state, sum(P.capacity)
from Infrastructure I
natural join Mine M
join produces P
on P.mine = M.entryno
join Commodity C
on C.comID = P.commodity
where C.name like '%Diamond%'
group by I.state
having count(P.mine) >=3;
它将计算每个州的商品数量,因为您已经在州内分组


希望有帮助

提示:使用having,我们希望没有生产“伪钻石”的地雷,我会使用
计数(不同的p.mine)>=3
@Raymond我也想到了这一点,但如果没有样本数据,我无法理解它的必要性。