Когда я использую Inner Join, некоторые из моих строк удаляются - PullRequest
0 голосов
/ 24 июня 2019

Я присоединяюсь к Таблице A и Таблице B

Table A :                    Table B:
A  C                        A D 
1  3                        1 2
4  4                        4 5 
7  4                        7 9

Мой код:

SELECT 
A.A,
A.C,
B.D
INTO TEST
FROM A INNER JOIN B ON A.A = B.A

Мой результат выглядит так:

A C D
1 3 2
4 4 5

Так что в некоторых строках число C одинаково. Но почему?

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Это может произойти, потому что то, что выглядит как 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(), но другие символы требуют немного больше работы - и это зависит от базы данных.

0 голосов
/ 24 июня 2019

может быть, у вас есть строка типа данных и некоторые скрытые символы, попробуйте обрезать пробел

  SELECT 
  A.A,
  A.C,
  B.D
  FROM A INNER 
  JOIN B ON trim(A.A)  = trim(B.A) 
...