我正在尝试JOIN
两个表,但它无法正常工作。我在所有表格中都有loc_id
,它们的值都为1
。我的数据库是INNODB。 loc_id
是名为b_locations
的第三个表的唯一ID。我曾尝试在JOIN
上包含此表,但我并不需要它,这也给了我相同的结果。我希望能够JOIN
3个或更多表格进行未来验证,但我需要先做好2个工作。
我的方法是加入查询中未包含的表的唯一ID是一种不好的方法吗?
这是我的SQL:
SELECT d.view_id,
d.gps_lat survey_lat,
d.gps_lng survey_lng,
d.thumbnail,
c.sign_type,
c.gps_lat object_lat,
c.gps_lng object_lng
FROM `d_view_angles` AS d
JOIN c_survey_elements AS c
ON d.loc_id = c.loc_id
WHERE c.loc_id = '1'
以下是我得到的内容(请参阅所需结果下方的粗体文字):
1 37.367156 -77.39987 ... FREESTANDING SIGN 37.367229 -77.399835
2 37.367305 -77.399801 ... FREESTANDING SIGN 37.367229 -77.399835
3 37.36739 -77.400022 ... FREESTANDING SIGN 37.367229 -77.399835
4 37.367619 -77.399897 ... FREESTANDING SIGN 37.367229 -77.399835
1 37.367156 -77.39987 ... DOWN LIGHTING 37.367408 -77.400077
2 37.367305 -77.399801 ... DOWN LIGHTING 37.367408 -77.400077
3 37.36739 -77.400022 ... DOWN LIGHTING 37.367408 -77.400077
4 37.367619 -77.399897 ... DOWN LIGHTING 37.367408 -77.400077
1 37.367156 -77.39987 ... DOWN LIGHTING 37.367635 -77.399944
2 37.367305 -77.399801 ... DOWN LIGHTING 37.367635 -77.399944
3 37.36739 -77.400022 ... DOWN LIGHTING 37.367635 -77.399944
4 37.367619 -77.399897 ... DOWN LIGHTING 37.367635 -77.399944
我已经尝试了GROUP BY survey_lat, survey_lng
,但它取得了前4个结果,它给了我以下内容(注意重复c.sign_type
,c.gps_lat
和c.gps_lng
):
1 37.367156 -77.39987 ... FREESTANDING SIGN 37.367229 -77.399835
2 37.367305 -77.399801 ... FREESTANDING SIGN 37.367229 -77.399835
3 37.36739 -77.400022 ... FREESTANDING SIGN 37.367229 -77.399835
4 37.367619 -77.399897 ... FREESTANDING SIGN 37.367229 -77.399835
这些是我应该得到的结果:
1 37.367156 -77.39987 ... FREESTANDING SIGN 37.367229 -77.399835
2 37.367305 -77.399801 ... FREESTANDING SIGN 37.367229 -77.399835
3 37.36739 -77.400022 ... DOWN LIGHTING 37.367408 -77.400077
4 37.367619 -77.399897 ... DOWN LIGHTING 37.367635 -77.399944
我确信这很简单,但我还没能找到问题。我的猜测是我的JOIN
,但我已阅读了大量的教程,遍布W3Schools,尝试了不同的JOINS
(INNER JOIN
,RIGHT JOIN
,RIGHT OUTER JOIN
等)并观看了Youtube教程。如果它不在我的SQL
语句中,那么欢迎有关表格格式的建议,如果需要任何其他信息,请告诉我。
我无法控制MYSQL版本,这是由远程服务器运行,由SurpassHosting托管(我不推荐它们)。
MYSQL服务器版本:5.0.95-社区
协议版本:10
通过PHPMyAdmin运行SQL查询版本信息:3.4.10.1和MSQL WorkBench 5.2.37 CE
答案 0 :(得分:2)
很明显,对于同一loc_id
1
,左表(d_view_angles
)中有4条记录,右表中有3条记录(c_survey_elements
)。
这可能意味着您需要使用的不仅仅是loc_id
才能加入。
显示每个表的相关内容将使此清楚。
答案 1 :(得分:1)
我认为你的表'd_view_angles
包含loc_id = 1
检查并确定。
答案 2 :(得分:0)
看起来唯一值为d.gps_lng survey_lng,
导致返回更多结果,要么从查询中省略此字段,要么使用DISTINCT
或WHERE
过滤结果,否则您拥有正确的查询。