使用左连接时限制右表的结果

时间:2015-04-12 16:52:49

标签: mysql left-join limit

我读了很多关于这个主题的主题,但我无法弄清楚我的项目。我有两张桌子,网格和点。 1个网格可能有多个点,但是,我只想要一个点表的结果(不管多个点中的哪一个不重要)或者当该网格的点没有条目时为NULL。 / p>

使用查询: SELECT g.id, g.latStart, g.latEnd, g.lngStart, g.lngEnd, p.teamId FROM grids g LEFT JOIN points p ON p.gridId = g.id

我将收到所有网格条目和点数的列表。然而,结果并不是我想要的结果。

我无法放置图片。这是JSON中的结果,因为我无法放置图像:



{
	"data":
	[
		{
			"id": 1,
			"latStart": "51.878347",
			"latEnd": "4.388849",
			"lngStart": "51.884847",
			"lngEnd": "4.399849",
			"teamId": 2
		},
		{
			"id": 1,
			"latStart": "51.878347",
			"latEnd": "4.388849",
			"lngStart": "51.884847",
			"lngEnd": "4.399849",
			"teamId": 2
		},
		{
			"id": 1,
			"latStart": "51.878347",
			"latEnd": "4.388849",
			"lngStart": "51.884847",
			"lngEnd": "4.399849",
			"teamId": 2
		},
		{
			"id": 2,
			"latStart": "51.878347",
			"latEnd": "4.399849",
			"lngStart": "51.884847",
			"lngEnd": "4.410849",
			"teamId": null
		},
		{
			"id": 3,
			"latStart": "51.878347",
			"latEnd": "4.410849",
			"lngStart": "51.884847",
			"lngEnd": "4.421849",
			"teamId": null
		},
		{
			"id": 4,
			"latStart": "51.878347",
			"latEnd": "4.421849",
			"lngStart": "51.884847",
			"lngEnd": "4.432849",
			"teamId": null
		}
	]
}




我收到三次网格ID为1,因为有三个点。如何将收到的点数限制为一个?我已经尝试了子查询,但我无法让它们工作。

先谢谢你帮助我!

1 个答案:

答案 0 :(得分:0)

  

我只想要点表的一个结果(不管多个点中的哪一个不重要)或者当该网格的点没有条目时为NULL。

如果是这种情况,那么您可以分组并采用最小或最大点.teamId

SELECT
    g.id
  , g.latStart
  , g.latEnd
  , g.lngStart
  , g.lngEnd
  , MAX(p.teamId) teamId
FROM grids g 
  LEFT JOIN points p ON p.gridId = g.id
GROUP BY 
    g.id
  , g.latStart
  , g.latEnd
  , g.lngStart