MySQL跨数据库联表查询指定字段时出现字段歧义报错求助
解决MySQL跨库联查的列歧义问题
嘿,这个问题太常见了!你遇到的是列名歧义导致的错误,咱们来拆解一下原因和解决办法:
为什么会报错?
你要查询的id字段在两个关联的数据源里都存在:
b_database.partner_company_clients(别名pcc)自带id字段- 子查询返回的
a_database.coupons结果(别名mac)也有id字段
当你写SELECT id, phone时,MySQL根本没法判断你要的是哪个表的id,所以就抛出了#1052 - Column 'id' in field list is ambiguous这个错误。
解决方案
根据你实际需要的id来源,修改查询语句即可:
情况1:需要partner_company_clients表的客户ID
给id加上表别名pcc.,明确指定字段来源:
SELECT pcc.id, pcc.phone FROM b_database.partner_company_clients pcc INNER JOIN (SELECT id, coupon from a_database.coupons) mac ON mac.id = pcc.coupon_id WHERE pcc.partner_company_id = 1 AND pcc.deleted_at IS NOT NULL;
情况2:需要coupons表的优惠券ID(即关联的coupon_id对应的原ID)
给id加上子查询的别名mac.:
SELECT mac.id, pcc.phone FROM b_database.partner_company_clients pcc INNER JOIN (SELECT id, coupon from a_database.coupons) mac ON mac.id = pcc.coupon_id WHERE pcc.partner_company_id = 1 AND pcc.deleted_at IS NOT NULL;
小建议
日常写多表联查(尤其是跨库联查)时,最好给所有查询字段都加上表别名,这样不仅能彻底避免歧义问题,还能让SQL语句的可读性大大提升,别人看你的代码也能一眼知道每个字段来自哪个表~
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

