MySQL中JOIN语句ON与USING关联的区别及字段歧义报错问题
报错原因解答与MySQL JOIN中ON、USING的区别
报错具体原因
Column 'department_id' in field list is ambiguous 报错的核心原因是:employees和departments两张表都存在名为department_id的字段,使用JOIN ... ON语法关联时,数据库无法判断查询语句中未指定表前缀的department_id属于哪张表,因此抛出字段歧义错误。
你可以直接在查询的department_id前指定所属表即可解决问题,关联后两张表的department_id值完全一致,任选一个指定即可,修改后的正确代码如下:
SELECT last_name, employees.department_id, -- 也可替换为 departments.department_id department_name FROM employees JOIN departments ON( employees.DEPARTMENT_ID = departments.DEPARTMENT_ID );
MySQL中JOIN关联时ON和USING的区别
- 适用场景不同:
USING仅适用于两张表的关联字段名称完全相同的场景,且仅支持等值关联;ON是通用关联语法,不受字段名限制,支持等值关联、非等值关联、多条件组合关联等所有关联场景。 - 同名字段处理逻辑不同:使用
USING关联时,数据库会自动合并两张表的关联同名字段,整个结果集中该字段仅保留1个,查询时不需要加表前缀也不会出现歧义,这也是你之前使用USING语法不会报错的原因;使用ON关联时,两张表的同名字段会独立保留在结果集中,查询时必须明确指定字段所属的表,否则会出现歧义报错。 - 语法灵活性不同:
USING支持同时指定多个同名字段关联,格式为USING(字段1, 字段2);ON支持自定义任意关联条件,例如ON t1.order_id = t2.id AND t1.pay_status = 1,灵活性远高于USING。
内容的提问来源于stack exchange,提问作者Saad Elkammah
相关产品推荐
相关产品推荐

