如何在不使用任何主键时加入两个表?

Pro*_*irl 1 mysql sql join inner-join

我正在尝试JOIN使用不是相应主键的列的2个表:

SELECT *
FROM TableA A
INNER JOIN TableB B
ON A.col5 = B.col5
Run Code Online (Sandbox Code Playgroud)

然而,上面是返回0 results即使我知道肯定有在列Table A,其col5值匹配值col5Table B.

我究竟做错了什么?

Gor*_*off 6

您查询:

SELECT *
FROM TableA A
INNER JOIN TableB B
ON A.col5 = B.col5;
Run Code Online (Sandbox Code Playgroud)

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

在某些情况下,值看起来相同但不是:

  • 两个值都是浮点数.打印出来时看起来一样.但是价值末尾的位不同.永远不要使用FLOAT进行EQUI-JOIN.
  • 一个值是数字,另一个值是字符串.其中一个值的转换导致稍微不同的值.
  • 一个值是日期/时间,另一个是字符串.其中一个值的转换导致稍微不同的值.
  • 值是字符串.他们的情况有所不同.你认为abc是相同的ABC1,但SQL没有.
  • 字符串末尾有空格或其他"隐藏"字符.

还有两个我能想到的原因,但在所有数据库中可能都不是这样:

  • 一个值是char和其他varchar(或它们的宽版本).char末尾的隐式空格使它们不同.
  • 一个是unicode字符串,另一个是ASCII字符串.两个字符看起来相同但不是.