2013-07-10 18 views
10

This section of Slick's documentation page很奇怪。什麼是zip加入?你有沒有聽說過,或成對加入?

這是什麼拉鍊加入?它說,它的意思是:

成對連接兩個查詢

,但是這是什麼意思@我不知道

我試過谷歌搜索這兩個「拉鍊加入。 「和」成對加入「......但對數據庫沒有結果。

我做維基百科獲得this當我搜索的「配對」雖然...


可能有人給我一些例子說明聯接和拉鍊之間的區別正常的外部或內部加入?謝謝!

+0

沒有正式的想法 - 但這會暗示我的第一行的查詢A與查詢B的第一行等 – Randy

+0

我會同意考慮拉鍊。接合集合中的數據順序非常重要,因此第1行到第1行第2行到第2行等。**然而,生成的壓縮查詢可以使用行號函數在SQL中表示,因此支持zipWithIndex一個簡單的操作符:**暗示拉鍊的概念是現貨,並且集合的順序非常重要 – xQbert

+0

也許它們表示「排序合併連接」:http://use-the-index-luke.com/sql/加入/排序合併加入 –

回答

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 

表1「拉鍊接合」表2:所有行,而不管匹配

[λ] [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 

郵編加入被像拉鍊結合數據,配對的第一行從第一行開始,第二行從第二行開始,等等。它實際上並不是在查看這些數據。它們可以很快生成,但它們並不意味着什麼,除非數據中已經存在一些有意義的命令,或者如果你只是想生成隨機配對

+0

很好的解釋。 Slick的zip方法對應於http://www.scala-lang.org/api/current/index.html#[email protected][B](GenIterable[B]):Iterable [(A,B) ],它被記錄爲「通過成對組合相應元素返回由此可迭代集合和另一個可迭代集合形成的可迭代集合。」。 – cvogt

+0

非常感謝! – Meredith

+1

它是如何實現的?生成什麼SQL? – nafg