Это может произойти, потому что то, что выглядит как 7
в двух таблицах, не совсем 7
.
Я легко могу представить две возможности.
Во-первых, выхранение значений в виде чисел с плавающей запятой.Таким образом, «7» может действительно быть «7.000000001» или «6.999999997», но оно печатается как «7».
Это относительно легко исправить, выполнив что-то вроде этого:
ON ABS(A.A - B.A) < 0.01
ON A.A BETWEEN B.A - 0.0001 AND B.A + 0.0001
ON CAST(A.A as int) = CAST(b.A as int)
(обратите внимание, что для равенства используются разные пороги.)
Во-вторых, значениястрок и у вас есть скрытые символы некоторого рода - пробелы в начале или конце строки (некоторые базы данных игнорируют их) или скрытые символы из расширенных наборов символов.
Это сложнее исправить.Пробелы могут быть удалены с помощью trim()
, но другие символы требуют немного больше работы - и это зависит от базы данных.