Udostępnij za pośrednictwem


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

  1. Dodaj do okienka Diagram tabelę lub obiekt tabelaryczny, 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 kliknij Warunek sprzężenia i Typ, a następnie kliknij wielokropek (...) po prawej stronie okna 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.

Zobacz też

Automatycznie twórz Self-Joins (Visual Database Tools)
zapytanie z sprzężeniami (Visual Database Tools)