【发布时间】: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