MySQL中INNER JOIN子句是否支持多个ON条件?报错排查
SQL语法错误分析与解决
你犯的两个关键语法错误
- WHERE子句位置错了:SQL里
WHERE必须放在所有JOIN语句之后,你把WHERE users.Id = "1"写在INNER JOIN前面,直接违反了语法顺序。 - 多条件连接写法错了:一个
INNER JOIN只能有一个ON关键字,多个连接条件得用AND(或OR)串联,不能重复写ON。
修正后的可运行代码
SELECT *, (SELECT GROUP_CONCAT(pho_file_name) FROM post_images WHERE pho_post_id=posts.ID) AS photo_file_array FROM users INNER JOIN posts ON users.Id = posts.post_author AND posts.post_date = "2020-12-04 07:51:21" WHERE users.Id = "1" ORDER BY posts.ID;
关于INNER JOIN多条件的问题
当然可以给INNER JOIN加多个连接条件,正确姿势是在单个ON后面用AND把多个条件连起来,就像上面的代码那样。这种写法能在表连接阶段就过滤掉不符合条件的数据,比把部分条件丢到WHERE里(部分场景)效率更高,逻辑也更直观。
如果逻辑允许,你也可以把用户ID的条件合并到JOIN的ON里,写法如下:
SELECT *, (SELECT GROUP_CONCAT(pho_file_name) FROM post_images WHERE pho_post_id=posts.ID) AS photo_file_array FROM users INNER JOIN posts ON users.Id = posts.post_author AND posts.post_date = "2020-12-04 07:51:21" AND users.Id = "1" ORDER BY posts.ID;
这两种写法结果一致,选哪种全看你觉得哪种逻辑表达更清晰。
内容的提问来源于stack exchange,提问作者Brad Cruise
相关产品推荐
相关产品推荐

