我的MySQL SELECT查询正在返回表中的所有行
我在这个问题上遇到了麻烦。我想从我的MySQL SELECT查询正在返回表中的所有行,mysql,select,left-join,Mysql,Select,Left Join,我在这个问题上遇到了麻烦。我想从projects表中选择一个项目,并从projects表中选择与其关联的所有文件。我的问题是: SELECT `projects`.`id` AS `project_id`, `projects`.`password` AS `project_password`, `projects`.`title` AS `project_title`, `projects`.`description` AS `project_descripti
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\u id
,project\u password
,project\u title
,project\u description
,project\u active
,file\u file
,file\u title
,以及file\u category
(对于返回的每一行,前两个字段都是相同的数据,其余的每个文件都不同)
这显然是返回projects
表中的每个项目,而不是仅仅检索test\u project3
的项目信息和文件
有什么建议吗
谢谢!只需使用
内部联接
而不是左联接
:
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"
;
左联接
保留项目
表中的所有行,而不管文件
表中是否有匹配项。您希望使用联接
作为筛选器,这是内部联接
所做的。解决此问题的一种方法是将项目
表上的谓词移动到t他使用WHERE
子句,并引用join列,而不是ON子句中的常量
大概是这样的:
FROM `projects`
LEFT
JOIN `files`
ON files.project_id = projects.id
WHERE projects.id = 'test_project3'
(这是标准模式,如果从项目中返回多行,则需要使用该模式。)我宁愿使用项目中的
左键连接projects.id=files.project\u id WHERE projects.id=“test\u project3”
很高兴知道,我不知道该语法是否有效,但谢谢。是的,我想返回正确的项目,不管它是否有任何相关文件。我想我试图将WHERE
子句放在LEFT JOIN
之前,我只是假设,因为这是一个语法错误,我不能使用WHERE由于某种原因,JOIN
语句中的code>子句。谢谢。