Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Możesz połączyć tabelę z samą sobą, nawet jeśli tabela nie ma relacji refleksyjnej w bazie danych. Na przykład możesz użyć samołączenia, aby znaleźć pary autorów mieszkających w tym samym mieście.
Podobnie jak w przypadku każdego sprzężenia, samosprzężenie wymaga co najmniej dwóch tabel. Różnica polega na tym, że zamiast dodawać drugą tabelę do zapytania, dodajesz drugie wystąpienie tej samej tabeli. W ten sposób można porównać kolumnę w pierwszym wystąpieniu tabeli z tą samą kolumną w drugim wystąpieniu, co pozwala porównać wartości w kolumnie ze sobą. Narzędzia projektanta zapytań i widoku (Visual Database Tools) przypisuje alias do drugiego wystąpienia tabeli.
Jeśli na przykład tworzysz samosprzężenie, aby znaleźć wszystkie pary autorów w Berkeley, porównaj city kolumnę w pierwszym wystąpieniu tabeli z kolumną city w drugim wystąpieniu. Wynikowe zapytanie może wyglądać następująco:
SELECT authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM authors
INNER JOIN authors AS authors1
ON authors.city = authors1.city
WHERE authors.city = 'Berkeley';
Tworzenie samołączenia często wymaga wielu warunków łączenia. Aby zrozumieć, dlaczego warto wziąć pod uwagę wynik poprzedniego zapytania:
Cheryl Carson Cheryl Carson
Abraham Bennet Abraham Bennet
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Pierwszy wiersz jest bezużyteczny; wskazuje, że Cheryl Carson mieszka w tym samym mieście co Cheryl Carson. Drugi rząd jest równie bezużyteczny. Aby wyeliminować te bezużyteczne dane, należy dodać kolejny warunek, zachowując tylko te wiersze wyników, w których dwie nazwy autorów opisują różnych autorów. Wynikowe zapytanie może wyglądać następująco:
SELECT authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM authors
INNER JOIN authors AS authors1
ON authors.city = authors1.city
AND authors.au_id <> authors1.au_id
WHERE authors.city = 'Berkeley';
Zestaw wyników został ulepszony:
Cheryl Carson Abraham Bennet
Abraham Bennet Cheryl Carson
Ale dwa wiersze wyników są zbędne. Pierwszy mówi Carson mieszka w tym samym mieście co Bennet, a drugi mówi Bennet mieszka w tym samym mieście co Carson. Aby wyeliminować tę nadmiarowość, można zmienić drugi warunek łączący z "nie równa się" na "mniejszy niż". Wynikowe zapytanie może wyglądać następująco:
SELECT authors.au_fname,
authors.au_lname,
authors1.au_fname AS Expr2,
authors1.au_lname AS Expr3
FROM authors
INNER JOIN authors AS authors1
ON authors.city = authors1.city
AND authors.au_id < authors1.au_id
WHERE authors.city = 'Berkeley';
Zestaw wyników wygląda następująco:
Cheryl Carson Abraham Bennet
Ręczne tworzenie samosprzężenia
Dodaj do okienka Diagram (Visual Database Tools) tabelę lub obiekt o wartości tabeli, z którym chcesz pracować.
Ponownie dodaj tę samą tabelę, aby okienko Diagram pokazywało tę samą tabelę lub obiekt o wartości tabeli dwa razy w okienku Diagram.
Projektant zapytań i widoków przypisuje alias do drugiego wystąpienia, dodając sekwencyjny numer do nazwy tabeli. Ponadto projektant zapytań i widoków tworzy linię sprzężenia między dwoma wystąpieniami tabeli lub obiektu wartości tabeli w okienku Diagram.
Kliknij prawym przyciskiem myszy linię połączenia i wybierz Właściwości z menu skrótów.
W oknie Właściwości wybierz pozycję Warunek sprzężenia i Typ , a następnie wybierz wielokropek (...) po prawej stronie właściwości.
W oknie dialogowym Dołączanie zmień operator porównania między kluczami podstawowymi zgodnie z potrzebami. Możesz na przykład zmienić operator na mniejszy niż (<).
Utwórz dodatkowy warunek sprzężenia (na przykład authors.zip = authors1.zip), przeciągając nazwę kolumny sprzężenia głównego w pierwszym wystąpieniu tabeli lub obiektu typu tabela i upuszczając ją na odpowiednią kolumnę w drugim wystąpieniu.
Określ inne opcje zapytania, takie jak kolumny wyjściowe, warunki wyszukiwania i kolejność sortowania.