在我的脚本中,我将对象ID
作为查询字符串参数传递。比如?idobject=1962
首先,我必须从OBJECTS
表格访问GeoLat
和GeoLng
列
我必须再次检查是否有其他对象包含相同的Geo Data
SELECT GeoLng, GeoLat
FROM OBJECTS
WHERE ID = 1962
从上面的查询我必须阅读GeoLng
和GeoLat
变量,并且必须编写第二个查询,如下所示
SELECT O.ID
FROM OBJECTS O
WHERE GeoLng = '12.72812515' /* will be taken from above query */
AND GeoLat = '47.7794388' /* will be taken from above query */
AND EXISTS(
SELECT ID
FROM InfObjects
WHERE ID = O.ID
)
我可以将这两个查询写入单个查询吗? 感谢
答案 0 :(得分:5)
修改:根据Rich的评论更新。
您需要的是自我加入。
SELECT O2.ID
FROM OBJECTS O1
JOIN OBJECTS O2 on O1.GeoLng = O2.GeoLng AND O1.GeoLat = O2.GeoLng
WHERE O1.ID = 1962
AND EXISTS(
SELECT ID
FROM InfObjects
WHERE ID = O2.ID
)
甚至更有效率,像这样:
SELECT O2.ID
FROM OBJECTS O1
JOIN OBJECTS O2 on O1.GeoLng = O2.GeoLng AND O1.GeoLat = O2.GeoLng
JOIN InfObjects I ON O2.ID = I.ID
WHERE O1.ID = 1962
答案 1 :(得分:3)
坚持使用“EXISTS”表达式,您可以执行以下操作:
SELECT O.ID
FROM OBJECTS O
AND EXISTS (
SELECT ID
FROM InfObjects
WHERE ID = O.ID
)
AND EXISTS (
SELECT 1
FROM OBJECTS o2
WHERE o2.GeoLng = O.GeoLng AND o2.GeoLat = O.GeoLat AND o2.ID = 1962
)
您也可以使用内部联接而不是相关查询来执行此操作,但我认为此语法也应该产生足够高性能的查询。
答案 2 :(得分:3)
SELECT O.ID
FROM OBJECTS OID
INNER JOIN Objects O ON O.GeoLng = OID.GeoLng AND O.GeoLat = OID.GeoLat
WHERE OID.ID = 1962
AND EXISTS(
SELECT ID
FROM InfObjects
WHERE ID = OID.ID
)