当我使用内部联接时,我的某些行将被删除

时间:2019-06-24 14:49:52

标签: sql join inner-join

我要加入表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 :(得分:0)

可能是因为您有数据类型为string的数据,并且有一些隐藏的char试图缩小了空间

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

答案 1 :(得分:0)

之所以会发生这种情况,是因为两个表中的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()删除空格,但是其他字符需要做更多的工作-这取决于数据库。