基于LEFT JOIN中联接的表ID扩展主表行



我需要编写查询,在那里我需要找到适合特定坐标的设备,然后用与地图上可见的设备在同一组中的一些设备扩展结果。

我可以找到设备及其配件组的部分是一项简单的任务,我只需在两个表上执行左连接,如下所示:

SELECT * 
FROM device 
LEFT JOIN group
ON device.group_id = group.id
WHERE geo_location && ST_MakeEnvelope(10, 30, 30, 50)

但我不确定将设备添加到属于可见设备组的结果中的有效方法是什么。

一个想法是从图示的查询中选择不同的组,然后再次查询设备表中适合这些组的组,但在我看来,这不是正确的方式。

感谢您的意见和帮助。

如果您不需要从group表中检索任何数据,那么您可以在表devices上执行自联接,同时使用相同的group_id:测试行

SELECT g.*
FROM device AS d
INNER JOIN devices AS g
ON g.group_id = d.group_id 
WHERE d.geo_location && ST_MakeEnvelope(10, 30, 30, 50)

您可以使用EXISTS:

SELECT *
FROM
device AS DEV
LEFT JOIN group AS GRP
ON DEV.group_id = GRP.id
WHERE
EXISTS
(
SELECT 1
FROM device
WHERE geo_location && ST_MakeEnvelope(10, 30, 30, 50) 
AND group_id = DEV.group_id
)

最新更新