为什么这个相当简单的连接不起作用?

时间:2011-06-08 09:23:49

标签: mysql database join left-join

我正在使用此查询来获取HABTM关系中具有特定标记的所有任务。但由于某种原因,它无法将相关标签附加到tags_tasks,因此返回0,因为它无法从标签表中拾取任何内容。

SELECT `Task` . * , `Task`.`id`
FROM `tasks` AS `Task`
LEFT JOIN `tags_tasks` AS `TagsTask` ON ( `TagsTask`.`task_id` = `Task`.`id` )
LEFT JOIN `tags` AS `FilterTag` ON ( `FilterTag`.`id` = 'TagsTask.tag_id' )
WHERE `Task`.`assigned_id` = '4de50bef-bbc8-404d-9f46-2a

当我删除WHERE子句时,它会返回所有任务但标记字段为NULL条目。

问题实际上是CakePHP使用引号而不是反引号创建无效连接。感谢您指出这一点,我将进行更深入的调查。

3 个答案:

答案 0 :(得分:2)

SELECT *
FROM `tasks`
LEFT JOIN `tags_tasks` ON ( `tags_tasks`.`task_id` = `tasks`.`id` )
LEFT JOIN `tags` ON ( `tags`.`id` = `tags_tasks`.`tag_id` )
WHERE `tags`.`name` = 'Problem'

你在第3行使用了一个字符串,这可能无法正常工作。

答案 1 :(得分:1)

代码突出显示真的有帮助,第二个连接的右边部分是错误的括号,它应该是反引号(`)而不是引号(')

答案 2 :(得分:1)

tags_tasks.tag_id被视为一个值,因为它在引号之间。