MySQL 查询 - 连接问题

标签 mysql join left-join

我有以下查询,它多次重复返回所有相同的行。

我需要加入 2 个表:评论和项目对象,但无论我尝试哪种方式,这些行都会重复多次。

这是当前的查询:

SELECT 
acx_comments.created_on AS 'Time',
acx_project_objects.created_by_id AS `Created By`,  
acx_comments.body AS `Comment`,
concat("http://www.example.com/projects/" , acx_project_objects.project_id , "/tasks/" , acx_project_objects.integer_field_1 ) AS URL
FROM acx_comments, acx_project_objects
LEFT JOIN acx_comments v
ON v.parent_id = acx_project_objects.id 
WHERE acx_comments.id > 1500 AND acx_comments.id <= 1575
ORDER BY acx_comments.created_on DESC

目前的结果是这样的:

时间/创建者/评论/网址

15:35:34/1/测试评论 X/URLx

15:35:34/1/测试评论 X/URLx

15:35:34/1/测试评论 X/URLx

15:35:34/1/测试评论 X/URLx

15:35:34/1/测试评论 X/URLx

15:35:34/1/测试评论 X/URLx

15:35:34/1/测试评论 X/URLx

如您所见 - 它多次打印相同的 Comment。

我知道这是因为 acx_comments.parent_id 在连接到 acx_project_objects.id 时有很多重复项 - 有很多评论具有相同的父 ID,因为每个父可以有多个评论...但我只想按日期顺序打印一次评论。

我想不出正确的 Join 方法来使它只打印每条评论一次。上面的代码没有给我按日期排序的评论列表(仅唯一)。

任何建议将不胜感激,因为我已经在这上面花了几个小时,但无法找到解决方案。

谢谢!

顺便说一句 - 我必须使用项目对象表,因为它需要构造 URL 地址(请参阅 concat 函数)。如果您认为我应该删除该表 - 这是不可能的

最佳答案

FROM acx_comments, acx_project_objects
LEFT JOIN acx_comments v
ON v.parent_id = acx_project_objects.id 

从技术上讲,您加入了 acx_comments 两次。您的 WHERE 子句不包含任何 JOIN 条件,并且您的 ON 子句中的 JOIN 条件仅适用于您的 LEFT JOIN 中指定的“acx_comments v”。

我对发生的事情的猜测是,您正在 acx_comments 和 acx_project_objects 之间创建笛卡尔积,因为它们在 WHERE 中没有 JOIN 条件的情况下以逗号分隔。然后你又加入了对 acx_comments 的困惑。

重写您的 FROM 和 LEFT JOIN,使每个表只列出一次,然后试一试。

SELECT 
v.created_on AS 'Time',
o.created_by_id AS `Created By`,  
v.body AS `Comment`,
concat("http://www.example.com/projects/" , o.project_id , "/tasks/" , o.integer_field_1 ) AS URL
FROM acx_comments v
LEFT JOIN acx_project_objects o
ON v.parent_id = o.id 
WHERE v.id > 1500 AND v.id <= 1575
ORDER BY v.created_on DESC

关于MySQL 查询 - 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457079/

相关文章:

mysql - 如何找到下一个订单ID mysql

php - MySQL 语法 :You have an error in your SQL syntax…

MYSQL - 选择表 A 中的值,其中表 B 中的所有对应值都具有特定值

php - 统计按月份 w 分组的状态的 SQL 查询。修订制度

php - 左连接重复项

Mysql递归查询获取父类别

java - 当两个事务同时发生并相互影响时,根据另一个表的数据更新一行表的方法是什么

php - 检查特定行是否存在mysql

mysql - 无法弄清楚为什么子查询返回超过 1 行

mysql - SQL查询问题