MySQL内部连接不应该产生结果......但确实如此

时间:2011-02-01 14:25:16

标签: mysql join

我遇到过生成错误查询的情况:

select a.id, e.ethnicity_cd, e.appl_person_id from applicants a
inner join ucpsom_production_ucpsom_production.ETHNICITY e
on e.appl_person_id = a.id
where a.amc_id = 12977319

错误发生在join语句中。该语句应为“e.appl_person_id = a.appl_person_id”并且不返回任何记录,因为没有e.appl_person_id值等于“80cbacb2-8444-11df-acd2-12313b079cc4”,a.id值。

然后发生的事情是MySQL将值80(对于e.appl_person_id)与值“80cbacb2-8444-11df-acd2-12313b079cc4”(对于a.id)匹配。因此:

  

80 =“80cbacb2-8444-11df-acd2-12313b079cc4”。

*注意:e.app_person_id是一个小数,a.id是一个字符串。*看起来MySQl正在将a.id值的前两个字符与e.appl_person_id值进行比较。

任何人都可以解释为什么MySQL会发生这种情况,而且,MySQL本质上是否具体?

非常感谢。

1 个答案:

答案 0 :(得分:0)

看起来MySQL正在尝试执行implicit conversion of data types(在这种情况下从字符串到int)。

大多数数据库都会隐式执行某些转换,例如SQL Server将隐式地从smallint转换为int,但隐式执行的转换将是DBMS特定的。