我的MySQL SELECT查询返回表中的所有行

时间:2013-08-12 23:23:43

标签: mysql select left-join

我遇到此查询时遇到问题。我想SELECTprojects中的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_passwordproject_titleproject_descriptionproject_activefile_filefile_title列的集合,file_categorytest_project3(前两个字段对于返回的每一行都是相同的数据,其余字段因文件而异)。

这不仅仅是检索projects的项目信息和文件,而是显然返回{{1}}表中的每个项目。

有什么建议吗?

谢谢!

2 个答案:

答案 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所做的。