我遇到过生成错误查询的情况:
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本质上是否具体?
非常感谢。
答案 0 :(得分:0)
看起来MySQL正在尝试执行implicit conversion of data types(在这种情况下从字符串到int)。
大多数数据库都会隐式执行某些转换,例如SQL Server将隐式地从smallint
转换为int
,但隐式执行的转换将是DBMS特定的。