Udostępnij za pomocą


Ręczne tworzenie samosprzężeń (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ą. 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

  1. Dodaj do okienka Diagram (Visual Database Tools) tabelę lub obiekt o wartości tabeli, z którym chcesz pracować.

  2. 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.

  3. Kliknij prawym przyciskiem myszy linię połączenia i wybierz Właściwości z menu skrótów.

  4. 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.

  5. 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ż (<).

  6. 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.

  7. Określ inne opcje zapytania, takie jak kolumny wyjściowe, warunki wyszukiwania i kolejność sortowania.