2013-07-10 10 views
10

This section of Slick's documentation page jest dość dziwne.Co to jest przyłączenie zip? Czy kiedykolwiek słyszałeś o tym lub o parach?

Co to jest połączenie zip? Mówi, że to znaczy:

parami przyłączenia dwóch zapytań

ale co to znaczy @ @ Nie wiem

Próbowałem Googling zarówno dla „zip przyłączyć. "i" parowanie dołączyć "... ale brak wyników dla baz danych.

zrobić dostać this z Wikipedii podczas wyszukiwania na „parami”, choć ...


Może ktoś dać mi jakieś przykłady ilustrujące różnice pomiędzy zamkiem dołączyć i normalna zewnętrzna lub wewnętrzna przyłączyć? Dzięki!

+0

bez formalnego pomysłu - ale oznaczałoby to dla mnie pierwszy wiersz zapytania A idzie z pierwszym wierszem zapytania B itd. – Randy

+0

Zgodziłbym się pomyśleć o suwaku. kolejność danych w połączonych zestawach jest ważna, tak więc 1. wiersz do 1. wiersza 2. wiersz do 2. wiersza itd. ** Wynikowe zapytanie skompresowane można jednak przedstawić w języku SQL za pomocą funkcji numeru wiersza, dzięki czemu zipWithIndex jest obsługiwany jako prymitywny operator: ** sugerujący, że koncepcja zamka błyskawicznego jest na miejscu i że kolejność zestawów jest BARDZO ważna – xQbert

+0

Może mają na myśli "Sort Merge Join": http://use-the-index-luke.com/sql/ join/sort-merge-join –

Odpowiedz

14

Złączenia zip mają znaczenie tylko w rozmowach o zamówionych zestawach. Zamiast łączenia się na podstawie wartości kolumny, łączymy się w oparciu o numer wiersza.

Tabela 1

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

Tabela 2

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

Tabela 1 WEWNĘTRZNY Dołącz Tabela 2 O [koloru] = [płomień]: jedynie dopasowania rzędy

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

Tabela 1 sprzężenia zewnętrznego Tabela 2 ON [kolor] = [płomień] Wszystkie rzędy, dopasowane w miarę możliwości

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

Tabela 1 „błyskawiczny połączone” na Table2: wszystkie rzędy niezależnie meczu

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

pocztowy łączy się połączenie danych, jak zamek błyskawiczny, parowania pierwszy wiersz z jednej tabeli z pierwszym wierszem z drugiej, drugi z drugim itd. W rzeczywistości nie patrzy na te dane. Mogą być generowane bardzo szybko, ale nie będą oznaczać niczego, jeśli nie ma jakiegoś sensownego zamówienia już obecnego w twoich danych lub jeśli chcesz tylko wygenerować przypadkowe parowanie

+0

Dobre wyjaśnienie. Metoda zip Slicka jest zgodna z http://www.scala-lang.org/api/current/index.html#[email protected][B](GenIterable[B]):Iterable[ (A,B) ], który jest udokumentowany jako "Zwraca iterowalną kolekcję utworzoną z tej iteracyjnej kolekcji i innej iteracyjnej kolekcji poprzez połączenie odpowiednich elementów w pary.". – cvogt

+0

Dziękuję bardzo! – Meredith

+1

W jaki sposób jest wdrażany?Jaki kod SQL jest generowany? – nafg

Powiązane problemy