我遇到此查询时遇到问题。我想SELECT
表projects
中的projects
项目以及SELECT
`projects`.`id` AS `project_id`,
`projects`.`password` AS `project_password`,
`projects`.`title` AS `project_title`,
`projects`.`description` AS `project_description`,
`projects`.`active` AS `project_active`,
`files`.`file` AS `file_file`,
`files`.`title` AS `file_title`,
`files`.`category` AS `file_category`
FROM `projects`
LEFT JOIN `files` ON
`projects`.`id` = "test_project3" AND
`files`.`project_id` = "test_project3"
;
表中与之关联的所有文件。这是我的疑问:
project_id
我希望结果是一个包含project_password
,project_title
,project_description
,project_active
,file_file
,file_title
列的集合,file_category
和test_project3
(前两个字段对于返回的每一行都是相同的数据,其余字段因文件而异)。
这不仅仅是检索projects
的项目信息和文件,而是显然返回{{1}}表中的每个项目。
有什么建议吗?
谢谢!
答案 0 :(得分:2)
解决此问题的一种方法是将projects
表上的谓词移动到WHERE
子句,并引用连接列而不是ON子句中的常量。
这样的事情:
FROM `projects`
LEFT
JOIN `files`
ON files.project_id = projects.id
WHERE projects.id = 'test_project3'
(这是规范模式,如果你从项目中返回多行,你想要使用的模式。)
答案 1 :(得分:0)
只需使用inner join
代替left join
:
SELECT
`projects`.`id` AS `project_id`,
`projects`.`password` AS `project_password`,
`projects`.`title` AS `project_title`,
`projects`.`description` AS `project_description`,
`projects`.`active` AS `project_active`,
`files`.`file` AS `file_file`,
`files`.`title` AS `file_title`,
`files`.`category` AS `file_category`
FROM `projects`
INNER JOIN `files` ON
`projects`.`id` = "test_project3" AND
`files`.`project_id` = "test_project3"
;
left join
保留projects
表中的所有行,无论files
表中是否存在匹配项。您希望使用join
作为过滤器,这是inner join
所做的。