【问题标题】:Optimize the following Postgress Query优化以下 Postgres 查询
【发布时间】:2021-05-04 11:42:44
【问题描述】:

您能帮我优化以下查询吗?我不喜欢我多次拨打ST_Covers 的事实。我已经搜索了整个 StackOverflow,但我完全被难住了。任何帮助表示赞赏。谢谢。

如果我尝试选择多个列,我会得到:subquery must return only one column。这就是为什么我将它们分成 3 个不同的选择语句

SELECT
   *,
   (SELECT id as city_id FROM cities WHERE ST_Covers(boundary, location))
   (SELECT name as city_name FROM cities WHERE ST_Covers(boundary, location)),
   (SELECT rent_fee FROM cities WHERE ST_Covers(boundary, location))
FROM cars

我的表格如下所示:

汽车

  • 身份证
  • 位置
  • vin
  • 制造商

城市

  • 身份证
  • 姓名
  • 边界
  • 租费

想要的输出:

  • 身份证
  • 位置
  • vin
  • 制造商
  • city_id
  • 城市名称
  • 租费

附: carscities 表之间没有关系,我想保持这种关系。

【问题讨论】:

  • 请同时提供示例数据和所需的输出。
  • 使用JOIN 而不是子查询。
  • 哪些列属于哪个表?
  • 你不能在一行中执行“从城市中选择 foo、bar、baz”吗?
  • 没有@kometen。我明白了subquery must return only one column

标签: sql postgresql optimization postgis


【解决方案1】:
SELECT
   cars.*, city_id, city_name, rent_fee 
FROM cars left join cities on ST_Covers(boundary, location)

如果 ST_Cover 一辆汽车有多个城市,这将为汽车返回多行。 (在这种情况下,您当前的查询将引发错误。)如果您对此不满意,那么您需要决定并描述在这种情况下应该发生什么。

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2021-08-31
    • 2017-12-25
    • 1970-01-01
    相关资源
    最近更新 更多