我想进行一个查询,它不会从表 2 中获取两个 AAA BBB 值。每当我使用 JOIN 运行查询(我尝试了所有不同的连接(时,它都会在结果中给我重复的值(001 - AAA 和 001 - BBB(。生成的查询应仅具有 3 个值 AAA CCC DDD。这可能吗?
SELECT *, ST_AsGeoJSON(geom,5) AS geojson FROM table1
LEFT JOIN table2 ON table.id2=table2.id2
GROUP BY table.id2
我尝试了上面的查询,但它出错了。 列"表2.Id2" 必须出现在 GROUP BY 子句中或在聚合函数中使用
table 1
id test
001 | A
002 | B
003 | C
007 | D
table2
id2(fk) test2
001 | AAA
001 | BBB
003 | CCC
007 | DDD
我对SQL相当陌生,所以我很抱歉。 任何帮助将不胜感激。 谢谢!
请尝试以下操作,您收到错误,因为您没有在group by
中包含table2.id2
。
SELECT *,
ST_AsGeoJSON(geom,5) AS geojson
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id2=t2.id2
GROUP BY
t1.id2,
t2.id2
你根本不需要GROUP BY
。 您没有聚合函数:
SELECT *, ST_AsGeoJSON(geom, 5) AS geojson
FROM table1 LEFT JOIN
table2
ON table1.id2 = table2.id2;
如果要每id2
一行,可以使用DISTINCT ON
:
SELECT DISTINCT ON (table1.id2) *, ST_AsGeoJSON(geom, 5) AS geojson
FROM table1 LEFT JOIN
table2
ON table1.id2 = table2.id2
ORDER BY table1.id2;
注意:当存在重复项时,这将返回任意匹配的行。 如果需要特定值,请添加第二个键以ORDER BY
。