Ręczne tworzenie Self-Joins (Visual Database Tools)
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ą. Projektant zapytań i widoków przypisuje alias do drugiego wystąpienia tabeli.
Jeśli na przykład tworzysz łączenie samodzielne, aby znaleźć wszystkie możliwe pary autorów w obrębie Berkeley, porównasz kolumnę city
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 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 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 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
Aby ręcznie utworzyć samosprzężenie
Dodaj do okienka Diagram tabelę lub obiekt tabelaryczny, 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 kliknij Warunek sprzężenia i Typ, a następnie kliknij wielokropek (...) po prawej stronie okna 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.
Zobacz też
Automatycznie twórz Self-Joins (Visual Database Tools)
zapytanie z sprzężeniami (Visual Database Tools)