1

我正在尝试JOIN使用不是两个表各自主键的列来创建 2 个表:

SELECT *
FROM TableA A
INNER JOIN TableB B
ON A.col5 = B.col5

0 results然而,即使我确定其中的值与of中Table Acol5值匹配,上述内容仍在返回。col5Table B

我究竟做错了什么?

4

2 回答 2

6

您查询:

SELECT *
FROM TableA A
INNER JOIN TableB B
ON A.col5 = B.col5;

具有正确的连接语法。如果有匹配的值,那么它将返回它。(或者,当然,您可以从应用程序中调用它,并且应用程序代码或与数据库的连接中可能存在错误,但这是另一个问题。)

一些值看起来相同但不同的情况:

  • 两个值都是浮点数。打印出来时它们看起来一样。但是值末尾的位不同。切勿将浮点数用于 EQUI-JOIN。
  • 一个值是数字,另一个值是字符串。其中一个值的转换会产生一个稍微不同的值。
  • 一个值是日期/时间,另一个是字符串。其中一个值的转换会产生一个稍微不同的值。
  • 值是字符串。它们的大小写不同。您认为abc与 相同ABC1,但 SQL 没有。
  • 字符串末尾有空格或其他“隐藏”字符。

还有两个我能想到但可能并非在所有数据库中都适用的原因:

  • 一个值是 char,另一个是 varchar(或它们的宽版本)。char 末尾的隐含空格使它们不同。
  • 一个是 unicode 字符串,另一个是 ASCII 字符串。两个字符看起来相同但实际上不同。
于 2013-05-18T19:37:40.087 回答
0

Your query is correct and should return the matching values in the table. But as you said there is invisible space in the values in other table at the end try using LTRIM and RTRIM to remove the invisible space from the values. LTRIM removes the whitespaces from the beginning of the string and RTRIM removes the whitespaces from the end of the string.

The query would be like :

SELECT * FROM TableA A INNER JOIN TableB B ON A.col5 = LTRIM(RTRIM(B.col5))

I hope it helps you out.

于 2013-05-19T10:00:33.187 回答