【问题标题】:Postgres query joining three tablesPostgres 查询连接三个表
【发布时间】:2015-09-23 01:23:24
【问题描述】:

我无法获得我认为是一个非常简单的查询。我已经设法编写了我的基本查询,但是当我尝试在第三个表上进行另一个连接时,它返回一个空结果。

这是有效的代码:

SELECT 
    *
FROM "Locations" AS r 
LEFT OUTER JOIN "Units" AS f 
    ON r.city = f.city AND 
       r.area = f.region
WHERE
    ST_Contains(
        ST_SetSRID(r.geom, 4326),  
        ST_SetSRID(ST_MakePoint(  
            -75.9165573, 45.3416112
        ), 4326)
    )

还有给我带来麻烦的代码:

SELECT 
    *
FROM "Locations" AS r 
LEFT OUTER JOIN "Units" AS f 
    ON r.city = f.city AND 
       r.area = f.region
LEFT OUTER JOIN "UnitDetails" AS fr
    ON fr."UnitId" = f.id
WHERE
    ST_Contains(
        ST_SetSRID(r.geom, 4326),  
        ST_SetSRID(ST_MakePoint(  
            -75.9165573, 45.3416112
        ), 4326)
    )

UnitId 是外键。我也尝试过使用 USING 而不是 ON 但我不明白 Postgres 如何找不到正确的结果。列被包括在内,但它们都是空结果。

我来自 MySQL,所以我想知道这是否只是我还没有得到的语法。

注意:如果我删除了 were 语句,它会完美运行。一旦我添加它......它就不再起作用了。

【问题讨论】:

  • 你能展示一个“工作”(有 WHERE 子句)和“非工作”(没有 WHERE 子句)输出的样本吗?从你的描述中不是很清楚。请详细说明什么有效,什么无效,以及在这种情况下到底什么无效。
  • 我现在无法为您提供数据集的完整转储,但基本上:没有 Where:结果已完成,表格已正确连接,并且我看到了所有字段的结果。 With Where:第三个“UnitDetails”表只返回空结果。
  • 编辑问题以添加更多信息,完成后在此处发表评论。这样它是可读的。
  • 我看不出查询有什么问题,因此包含指定点的“位置”似乎没有为它们定义“单元详细信息”。你能用点测试哪些“单元”与“位置”相关,然后独立测试是否为这些“单元”定义了“单元细节”吗?

标签: sql postgresql


【解决方案1】:

这最终与我无法完全解释的奇怪索引问题有关。查询确实很完美,非常烦人。

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 2012-05-02
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    相关资源
    最近更新 更多