2011-02-01 3 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".

은 * 참고 :. MYSQL이 e.appl_person_id 값으로 a.id 값의 처음 두 문자를 비교처럼 e.app_person_id는 소수이고 a.id는 문자열 * 같습니다.

아무도 왜 이런 일이 MySQL에서 일어 났는지 설명 할 수 있습니까?

감사합니다.

답변

0

MySQL이 implicit conversion of data types (이 경우 문자열에서)으로 시도하는 것처럼 보입니다.

대부분의 데이터베이스는 암시 적으로 일부 변환을 수행합니다. 예를 들어 SQL 서버는 암시 적으로 smallint에서 int으로 변환되지만 암시 적으로 수행되는 변환은 DBMS 고유입니다.

+0

참고해 주셔서 감사합니다. 모두 설명합니다! – imarichardson