DISTINCT nie pomoże, jeśli wiersze mają jakieś inne kolumny. Oczywiście jedna z tabel, do których się dołączasz, ma wiele wierszy dla jednego wiersza w innej tabeli. Aby odzyskać jeden wiersz, musisz wyeliminować wiele innych wierszy w tabeli, do której się dołączasz.
Najprostszym sposobem, aby to zrobić, jest rozszerzenie klauzuli where lub ograniczenia JOIN, aby dołączyć tylko do jednego rekordu, który chcesz. Zwykle wymaga to określenia reguły, która zawsze wybierze „poprawny” wpis z innej tabeli.
Załóżmy, że masz prosty problem, taki jak ten:
Person: Jane
Pets: Cat, Dog
Jeśli utworzysz tutaj proste dołączenie, otrzymasz dwa rekordy dla Jane:
Jane|Cat
Jane|Dog
Jest to całkowicie poprawne, jeśli Twoim zdaniem jest lista wszystkich kombinacji ludzi i zwierząt. Jeśli jednak zamiast tego twój pogląd miał zawierać listę osób ze zwierzętami domowymi lub listę osób i pokazywać jedno z ich zwierząt, trafiłeś na problem, który masz teraz. W tym celu potrzebujesz reguły.
SELECT Person.Name, Pets.Name
FROM Person
LEFT JOIN Pets pets1 ON pets1.PersonID = Person.ID
WHERE 0 = (SELECT COUNT(pets2.ID)
FROM Pets pets2
WHERE pets2.PersonID = pets1.PersonID
AND pets2.ID < pets1.ID);
W ten sposób stosuje się regułę ograniczającą rekord Zwierzaków w dołączaniu do Zwierzaka o najniższym ID (pierwszy w tabeli Zwierzaki). Klauzula WHERE zasadniczo mówi „gdzie nie ma zwierząt należących do tej samej osoby o niższej wartości identyfikatora”.
Dałoby to jeden rekordowy wynik:
Jane|Cat
Reguła, którą musisz zastosować do swojego widoku, będzie zależeć od danych w Twoich kolumnach oraz od tego, który z „wielu” rekordów powinien być wyświetlany w kolumnie. Jednak spowoduje to ukrycie niektórych danych, które mogą nie być tym, czego chcesz. Na przykład powyższa zasada ukrywa fakt, że Jane ma psa. To sprawia wrażenie, jakby Jane miała tylko kota, kiedy to nie jest poprawne.
Być może będziesz musiał przemyśleć zawartość swojego widoku i to, co próbujesz osiągnąć za pomocą swojego widoku, jeśli zaczynasz filtrować prawidłowe dane.