Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie entferne ich doppelte Zeilen aus einer Ansicht?

DISTINCT hilft Ihnen nicht, wenn die Zeilen unterschiedliche Spalten haben. Offensichtlich hat eine der Tabellen, denen Sie beitreten, mehrere Zeilen für eine einzelne Zeile in einer anderen Tabelle. Um eine Zeile zurückzubekommen, müssen Sie die anderen Mehrfachzeilen in der Tabelle, mit der Sie sich verbinden, eliminieren.

Der einfachste Weg, dies zu tun, besteht darin, Ihre where-Klausel oder JOIN-Beschränkung so zu erweitern, dass sie nur mit dem einzelnen Datensatz verknüpft wird, den Sie möchten. Normalerweise muss dazu eine Regel festgelegt werden, die immer den 'richtigen' Eintrag aus der anderen Tabelle auswählt.

Nehmen wir an, Sie haben ein einfaches Problem wie dieses:

Person:  Jane
Pets: Cat, Dog

Wenn Sie hier einen einfachen Join erstellen, erhalten Sie zwei Datensätze für Jane:

Jane|Cat
Jane|Dog

Das ist völlig richtig, wenn Sie alle Kombinationen von Menschen und Haustieren auflisten möchten. Wenn Ihre Ansicht jedoch stattdessen Personen mit Haustieren auflisten oder Personen auflisten und eines ihrer Haustiere anzeigen sollte, stoßen Sie auf das Problem, das Sie jetzt haben. Dazu benötigen Sie eine Regel.

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);

Dadurch wird eine Regel angewendet, um den Pets-Datensatz im Join auf das Pet mit der niedrigsten ID (an erster Stelle in der Pets-Tabelle) zu beschränken. Die WHERE-Klausel sagt im Wesentlichen „wo es keine Haustiere derselben Person mit einem niedrigeren ID-Wert gibt“.

Dies würde ein Ein-Datensatz-Ergebnis ergeben:

Jane|Cat

Die Regel, die Sie auf Ihre Ansicht anwenden müssen, hängt von den Daten in den vorhandenen Spalten ab und davon, welche der „mehreren“ Datensätze in der Spalte angezeigt werden sollen. Dadurch werden jedoch einige Daten ausgeblendet, die möglicherweise nicht Ihren Wünschen entsprechen. Zum Beispiel verbirgt die obige Regel die Tatsache, dass Jane einen Hund hat. Es sieht so aus, als hätte Jane nur eine Katze, obwohl das nicht stimmt.

Möglicherweise müssen Sie den Inhalt Ihrer Ansicht und das, was Sie mit Ihrer Ansicht erreichen möchten, überdenken, wenn Sie damit beginnen, gültige Daten herauszufiltern.