MySQL Inner Join не должен давать результатов ... но это делает - PullRequest
0 голосов
/ 01 февраля 2011

Я столкнулся с ситуацией, когда был сгенерирован неправильный запрос:

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 специфическим по своей природе?

Большое спасибо.

1 Ответ

0 голосов
/ 01 февраля 2011

Похоже, что MySQL пытается выполнить неявное преобразование типов данных (в данном случае из строки в int).

В большинстве баз данных некоторые преобразования выполняются неявно, например, сервер SQLбудет неявно преобразовывать из smallint в int, но какие преобразования будут выполняться неявно, будет зависеть от СУБД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...