2011-02-01 32 views
0

我遇到在那里产生不正确的查询的情况:MySQL的内部联接不应产生结果...但它确实

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 

的错误是在连接语句。该语句应为“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

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

大多数数据库都会隐含地进行一些转换,例如SQL服务器将隐式地从smallint转换为int,但是隐式完成哪些转换将是DBMS特有的。

+0

非常感谢您的参考。解释一切! – imarichardson 2011-02-01 15:45:57