РЕДАКТИРОВАТЬ: удалил мои предыдущие предположения после того, как структура и данные были предоставлены и написал новый ответ :
Я считаю, что вы хотите присоединиться к GroupTracker на devid, а не на groupid. Groupid 1 соответствует обеим строкам таблицы GroupTracker, поэтому он предоставит два результата для каждой 1 строки в GroupMemebership. Devid соответствует только одному ряду. Правильный JOIN более эффективен, чем ваше текущее решение GROUP BY (в комментариях), и может также давать более согласованные результаты по мере роста вашей базы данных.
SELECT gl.name, gl.color, gl.sampling,
gl.forget, gl.connected, gl.trace,
g.groupname, gt.latitude, gt.longitude,
gt.timestamp
FROM GroupMembership AS gm
JOIN GroupLocator AS gl ON gm.devid = gl.devid
JOIN Groups AS g ON gm.groupid = g.groupid
JOIN GroupTracker AS gt ON gm.devid = gt.devid
WHERE gm.groupid=1
;
Я присвоил псевдонимы всем вашим таблицам, так что запрос намного короче и, следовательно, быстрее писать. Я также поменял местами все ваши предложения JOIN. Я предпочитаю иметь левый стол слева и правый стол справа. Облегчает чтение. Эти два изменения не важны. Это всего лишь стиль. Запрос будет отлично работать без них.