如何在MySQL中结合WHERE子句使用Inner Join筛选指定admin_id的记录?
正确SQL改写方案及错误分析
正确写法
有两种严谨且有效的写法:
- 在WHERE子句中指定表别名过滤
SELECT * FROM tuition t JOIN user u ON t.user_id = u.id WHERE t.admin_id = 1
这里明确指定admin_id属于tuition表(通过别名t),避免字段歧义(如果user表也存在同名字段时会引发错误)。
- 将过滤条件整合到JOIN的ON子句中
SELECT * FROM tuition t JOIN user u ON t.user_id = u.id AND t.admin_id = 1
这种写法逻辑上更清晰,先过滤tuition表中admin_id=1的记录,再与user表关联,内连接场景下和WHERE过滤效果一致。
原写法错误原因
- 第一种写法未指定
admin_id的所属表:若user表也有admin_id字段,数据库会因字段歧义无法执行;即使无歧义,也属于不严谨的写法,容易引发后续问题。 - 第二种写法存在语法错误:
WHERE子句不能直接衔接JOIN,JOIN是表关联语法,必须置于FROM之后、WHERE之前,不符合SQL语法规范。
内容的提问来源于stack exchange,提问作者Ali Bahaari
相关产品推荐
相关产品推荐

