我要加入表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具有相同的数字。 但是为什么呢?
答案 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()
删除空格,但是其他字符需要做更多的工作-这取决于数据库。