什么是拉链连接?你有没有听说过,或成对加入?

时间:2013-07-10 21:43:03

标签: sql database scala slick

This section of Slick's documentation page很奇怪。

什么是拉链连接?它说这意味着:

  

两个查询的成对连接

但这意味着@。@我不知道

我尝试使用Google搜索“zip join”和“pairwise join”...但没有与数据库有关的结果。

当我搜索“成对”时,我从维基百科得到this,但是......


有人能举例说明拉链连接和普通外连接或内连接之间的区别吗?谢谢!

1 个答案:

答案 0 :(得分:14)

Zip连接仅在谈论有序集时才有意义。您将根据行号加入,而不是根据列的值进行连接。

表1

[λ]  [color] 
400  violet 
415  indigo 
475  blue   
510  green  
570  yellow 
590  orange 
650  red    

表2

[flame]  [element]
green    boron
yellow   sodium
white    magnesium
red      calcium
blue     indium

表1 INNER JOIN表2 ON [颜色] = [火焰] :仅匹配行

[λ]  [color]  [flame]  [element]
475  blue     blue     indium 
510  green    green    boron
570  yellow   yellow   sodium
650  red      red      calcium

表1 OUTER JOIN表2 ON [颜色] = [火焰] :所有行,尽可能匹配

[λ]  [color]  [flame]  [element]
400  violet   NULL     NULL
415  indigo   NULL     NULL
475  blue     blue     indium
510  green    green    boron
570  yellow   yellow   sodium
590  orange   NULL     NULL
650  red      red      calcium
NULL NULL     white    magnesium

Table1“zip join”到Table2 :所有行,无论匹配

[λ]  [color]  [flame]  [element]
400  violet   green    boron
415  indigo   yellow   sodium
475  blue     white    magnesium
510  green    red      calcium
570  yellow   blue     indium
590  orange   NULL     NULL
650  red      NULL     NULL

Zip连接将数据组合成拉链,将一个表中的第一行与另一个表中的第一行配对,第二行与第二行配对,等等。实际上并没有查看该数据。它们可以非常快速地生成,但除非您的数据中已存在某些有意义的顺序,或者您只想生成随机配对,否则它们不会有任何意义