删除SQL on联接中结果的重复项
我想做一个查询,它不会从表2中同时获取AAA BBB值。每当我使用连接运行一个查询时(我尝试了所有不同的连接),它都会在结果中给我重复的值(001-AAA和001-BBB)。结果查询应该只有3个值AAA CCC DDD。这可能吗删除SQL on联接中结果的重复项,sql,postgresql,join,Sql,Postgresql,Join,我想做一个查询,它不会从表2中同时获取AAA BBB值。每当我使用连接运行一个查询时(我尝试了所有不同的连接),它都会在结果中给我重复的值(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 我尝试了上面的查询,但它出错了。列
SELECT *, ST_AsGeoJSON(geom,5) AS geojson FROM table1
LEFT JOIN table2 ON table.id2=table2.id2
GROUP BY table.id2
我尝试了上面的查询,但它出错了。列“table2.Id2”必须出现在GROUPBY子句中或在聚合函数中使用
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相当陌生,所以我道歉。
任何帮助都将不胜感激。
谢谢 尝试以下操作,您将收到错误,因为您没有将
表2.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
您根本不需要分组依据。您没有聚合函数:
SELECT *, ST_AsGeoJSON(geom, 5) AS geojson
FROM table1 LEFT JOIN
table2
ON table1.id2 = table2.id2;
如果希望每个id2
有一行,可以在上使用DISTINCT:
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
中添加第二个键,您的预期输出是什么?我让它与SELECT DISTINCT一起工作。还有其他方法吗?可能有,但不清楚您真正想要什么。请在代码问题中给出一个--cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。给出你能给出的最少代码,即你显示的代码是OK的,扩展为你显示的代码是不OK的。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并将其作为格式化为表的代码输入。停止尝试编码你的总体目标,并解释你期望从给定的代码中得到什么以及为什么。你的错误消息是一个常见问题。在考虑发帖之前,请阅读您的教科书和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。请参见文本上方的投票箭头(&S)。PS请通过编辑澄清,而不是评论。谢谢回复!嗯,现在看来我现在不能点菜了。选择DISTINCT ON(eats2.id2)id2,*从eats2左侧连接eats2\u imgs ON eats2.id2=eats2\u imgs.id2\u eats2;ORDER BY eats2.id2错误:语法错误位于或接近“ORDER”,我让它这样工作。从eats2左侧选择DISTINCT ON(eats2.id2,eats2.score)*加入eats2上的eats2\u imgs。id2=eats2\u imgs.id2\u eats2按eats2.score说明顺序谢谢!