在SQL中,JOIN和INNER JOIN意味着同样的事情。在Matlab中,它们是不同的命令。仅仅通过仔细阅读文档到目前为止,它们出现在表面上以填充相同的一般功能,细节可能存在差异,由参数控制。我正在讨论各个例子,可能(或可能不)找到根本的区别。但是,我觉得差异不应该是用户必须从示例中剔除的微妙之处。这是两个单独的命令,文档应该清楚地说明为什么需要它们。是否有人能够谈到关键的区别?也许它可能成为将其放在文档中的前沿和中心的请求。
答案 0 :(得分:0)
我根据经验描述了JOIN和INNERJOIN之间的区别(有些人将此称为逆向工程)。我将从一个对SQL感到满意的人的角度进行总结。由于我是Matlab中类似SQL的操作的新手,我只能在有限的程度上测试它,但是INNERJOIN似乎以与SQL相同的方式连接记录。由于SQL是一种非常开放的语言,因此INNERJOIN的行为规范很容易获得,我不再赘述。这是Matlab的JOIN,我需要提出来。
简而言之,从我的测试来看,Matlab的JOIN似乎以一种更像Excel的VLOOKUP而不是SQL中的任何JOINS的方式“连接”两个操作数表中的行。通常,与SQL连接的主要区别似乎是(i)右表不能在用于匹配两个表之间的行的列中具有重复值,以及(ii)左侧键列中的所有值组合手表必须出现在右手表中。
这是经验测试。首先,准备测试表:
a=array2table([
1 2
3 4
5 4
],'VariableNames',{'col1','col2'})
b=array2table([
4 7
4 8
6 9
],'VariableNames',{'col2','col3'})
c=array2table([
2 10
4 8
6 9
],'VariableNames',{'col2','col3'})
d=array2table([
2 10
4 8
6 9
6 11
],'VariableNames',{'col2','col3'})
a2=array2table([
1 2
3 4
5 4
20 99
],'VariableNames',{'col1','col2'})
以下是测试:
>> join(a,b)
Error using table/join (line 111)
The key variable for B must have unique values.
>> join(a,c)
ans = col1 col2 col3
____ ____ ____
1 2 10
3 4 8
5 4 8
>> join(a,d)
Error using table/join (line 111)
The key variable for B must have unique values.
>> join(a2,c)
Error using table/join (line 130)
The key variable for B must contain all values in the key
variable for A.
首先要注意的是,JOIN不是关于两个表的对称操作。
似乎第二个表参数用作查找表。与SQL连接不同,如果Matlab在第二个表中找不到匹配项,则抛出错误[请参阅join(a2,d)]。这在文档中有点暗示,但并不完全清楚。例如,它表示键值必须对两个表都是通用的,但join(a,c)清楚地表明表不必具有公共键值。相反,就像人们期望的查找表一样,第二个表包含不匹配的条目不会抛出错误。
与SQL连接的另一个区别是,在Matlab的连接中不允许导致键值在第二个表中复制的记录。 [见加入(a,b)&加入(一,d)]。相反,用于匹配表之间的记录的字段甚至不被称为SQL中的键,因此在两个表中的任何一个中都可以具有非唯一值。第二个表中不允许重复键值与第二个表作为查找表的视图一致。另一方面,在第一个表中允许重复键值。