postgre从 SQL on JOIN 中的结果中删除重复项



我想进行一个查询,它不会从表 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

最新更新