含WITH子句与空间函数的SQL查询语句翻译及技术问询
带WITH子句与PostGIS空间函数的SQL查询翻译及解析
我来帮你拆解并翻译这条SQL语句,同时保留所有技术术语和代码格式:
原SQL代码(补全截断部分的合理推测)
WITH values(location, userid) as ( VALUES (st_geomfromewkt('0101000000000000C04141464000000000FE174440'),5)) SELECT st_distance(p.location,(SELECT location FROM values where v.userid = "blacklisterId")::geometry) FROM values as v,live.partners as p Inner JOIN backend.cars c ON (c."userId" = p."partnerId" AND c.active = true) Inner JOIN backend."carCompatibleTariffs" cCT ON c."carId" = cCT."carId" and 1 = cCT."tariffId" AND cCT.active = true LEFT JOIN backend."userBlacklist" bl on 5 = bl."blacklistedUserId"
逐部分中文翻译与功能说明
WITH公共表表达式(CTE)
这段代码定义了一个临时数据集values,包含location(空间位置字段)和userid(用户ID字段):WITH values(location, userid) as ( VALUES (st_geomfromewkt('0101000000000000C04141464000000000FE174440'),5))其中
ST_GeomFromEWKT()是PostGIS提供的空间函数,作用是将**EWKT(扩展熟知文本)**格式的空间字符串转换为数据库可识别的几何对象,这里对应的是用户ID为5的空间位置。SELECT核心查询
这部分是查询的核心,调用ST_Distance()空间函数计算两个几何对象之间的空间距离:SELECT st_distance(p.location,(SELECT location FROM values where v.userid = "blacklisterId")::geometry)具体来说,就是计算
live.partners表中合作商家的位置p.location,与临时表values中匹配blacklisterId的用户位置之间的空间距离。::geometry是PostgreSQL的类型转换语法,确保字段以几何类型参与计算。FROM与JOIN关联逻辑
这部分负责关联多个业务表,筛选符合条件的数据:FROM values as v,live.partners as p Inner JOIN backend.cars c ON (c."userId" = p."partnerId" AND c.active = true) Inner JOIN backend."carCompatibleTariffs" cCT ON c."carId" = cCT."carId" and 1 = cCT."tariffId" AND cCT.active = true LEFT JOIN backend."userBlacklist" bl on 5 = bl."blacklistedUserId"中文解释:
- 从临时表
values(别名v)和合作商家表live.partners(别名p)开始构建数据集; - 内连接车辆表
backend.cars:只保留与合作商家ID匹配、且处于激活状态(active = true)的车辆记录; - 内连接车辆适配资费表
backend.carCompatibleTariffs:只保留与车辆ID匹配、资费ID为1、且处于激活状态的资费记录; - 左连接用户黑名单表
backend.userBlacklist:关联用户ID为5的黑名单记录(原语句此处截断,我根据业务逻辑推测关联字段为blacklistedUserId)。
- 从临时表
内容的提问来源于stack exchange,提问作者Grigor
相关产品推荐
相关产品推荐

