我目前有这个查询:
SELECT c.id, COUNT(*) AS num
FROM castle c, resource r
WHERE db2gse.ST_Contains(r.geom, c.geom) = 1
GROUP BY c.id;
如果资源数量为1或更高,它将为我提供城堡及其资源数量。现在我也想要没有资源的城堡。
城堡有id和几何,资源有id和几何。
所以我希望这个查询给我所有的城堡及其资源数量,即使资源数量为0.你可以通过检查城堡的位置是否在资源内部来查看城堡是否有某种资源,通过检查资源的几何是否包含城堡的几何形状。
答案 0 :(得分:2)
使用明确的join
语法,因此您可以使用left join
:
SELECT c.id, COUNT(r.<col>) AS num
FROM castle c LEFT JOIN
resource r
ON db2gse.ST_Contains(r.geom, c.geom) = 1
GROUP BY c.id;
一个简单的规则:永远不要在from
子句中使用逗号。
编辑:
您需要resource
表中的一列用于计数,但geom
可能不起作用(取决于其类型)。如果您没有,请将查询标记为:
select c.id,
(select count(*)
from resource r
where db2gse.ST_Contains(r.geom, c.geom) = 1
) as num
from castle c;