无法让SQL JOIN正常工作

时间:2012-10-08 15:11:17

标签: mysql sql join

我正在尝试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_typec.gps_latc.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,尝试了不同的JOINSINNER JOINRIGHT JOINRIGHT OUTER JOIN等)并观看了Youtube教程。如果它不在我的SQL语句中,那么欢迎有关表格格式的建议,如果需要任何其他信息,请告诉我。


我无法控制MYSQL版本,这是由远程服务器运行,由SurpassHosting托管(我不推荐它们)。

MYSQL服务器版本:5.0.95-社区
协议版本:10
通过PHPMyAdmin运行SQL查询版本信息:3.4.10.1和MSQL WorkBench 5.2.37 CE

3 个答案:

答案 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,导致返回更多结果,要么从查询中省略此字段,要么使用DISTINCTWHERE过滤结果,否则您拥有正确的查询。