1

我正在尝试JOIN两张桌子,但它无法正常工作。我loc_id在所有表中都有,它们的值都是1. 我的数据库是 INNODB。loc_id是名为 的第三个表的唯一 ID b_locations。我也尝试过将这张桌子包括在内JOIN,但我真的不需要它,这也给了我相同的结果。我希望能够使用JOIN3 个或更多表以供将来校对,但显然我需要先让 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_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 JOIN、、、RIGHT JOINRIGHT OUTER JOIN)并观看了 Youtube 教程。如果它不在我的SQL声明中,那么欢迎对表格格式提出建议,如果需要任何其他信息,请告诉我。


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

MYSQL Server 版本:5.0.95-community
协议版本:10
通过 PHPMyAdmin 运行 SQL 查询版本信息:3.4.10.1 和 MSQL WorkBench 5.2.37 CE

4

3 回答 3

2

显然,同样loc_id的,左表 ( )1中有 4 条记录,右表 ( d_view_angles) 中有 3 条记录c_survey_elements

这可能意味着您需要使用的不仅仅是loc_id加入。

显示每个表的相关内容将使这一点变得清晰。

于 2012-10-08T16:07:16.413 回答
1

我认为您的表 'd_view_angles包含 loc_id = 1 的多个寄存器

检查并确定。

于 2012-10-08T15:20:09.550 回答
0

看起来唯一值会 d.gps_lng survey_lng,导致返回更多结果,要么从查询中省略此字段,要么使用过滤结果DISTINCT,否则WHERE您有正确的查询。

于 2012-10-08T15:14:19.633 回答