Unterschied zwischen Select Unique und Select Distinct


145

Ich fand diese synonom, schrieb aber Folgendes in Microsoft SQL:

Select Unique col from 
     (select col from table1 union select col from table2) alias

Und es ist gescheitert. Ändern in

Select Distinct col from 
     (select col from table1 union select col from table2) alias

behoben. Kann jemand erklären?

Antworten:


169

SELECT UNIQUEist eine alte Syntax, die von Oracle SQL unterstützt wird. Es ist gleichbedeutend mit SELECT DISTINCT.

Verwendung, SELECT DISTINCTda dies Standard-SQL ist und SELECT UNIQUEnicht Standard ist und in anderen Datenbankmarken als Oracle SELECT UNIQUEmöglicherweise überhaupt nicht erkannt wird.


113

Eindeutig ist ein Schlüsselwort, das in der Anweisung Create Table () verwendet wird, um anzugeben, dass ein Feld eindeutige Daten enthält, die normalerweise für natürliche Schlüssel, Fremdschlüssel usw. verwendet werden.

Beispielsweise:

Create Table Employee(   
    Emp_PKey Int Identity(1, 1) Constraint PK_Employee_Emp_PKey Primary Key,  
    Emp_SSN Numeric Not Null Unique,  
    Emp_FName varchar(16),   
    Emp_LName varchar(16) 
)

dh Die Sozialversicherungsnummer von jemandem ist wahrscheinlich ein eindeutiges Feld in Ihrer Tabelle, aber nicht unbedingt der Primärschlüssel.

Distinct wird in der Select-Anweisung verwendet, um die Abfrage zu benachrichtigen, dass die eindeutigen Elemente nur zurückgegeben werden sollen, wenn ein Feld Daten enthält, die möglicherweise nicht eindeutig sind.

Select Distinct Emp_LName
From Employee

Möglicherweise haben Sie viele Mitarbeiter mit demselben Nachnamen, aber Sie möchten nur jeden unterschiedlichen Nachnamen.

Wenn das von Ihnen abgefragte Feld eindeutige Daten enthält, wird das Schlüsselwort Distinct offensichtlich überflüssig.


2
Möglicherweise möchten Sie, dass die Sozialversicherungsnummern eindeutig sind, dies ist jedoch nicht der Fall. ZB: dailyfinance.com/2010/08/12/…
aij

18

select unique ist keine gültige Syntax für das, was Sie tun möchten

Sie möchten entweder "Auswählen" oder "Auswählen" auswählen

Und tatsächlich brauchen Sie nicht einmal einen Unterschied in dem, was Sie versuchen zu tun. Sie können Duplikate entfernen, indem Sie die entsprechenden Parameter für die Union-Anweisung auswählen.

Die folgende Abfrage allein liefert nur unterschiedliche Werte

select col from table1 
union 
select col from table2

Wenn Sie Duplikate wollten, müssten Sie tun

select col from table1 
union all
select col from table2

1
Wenn ich mich nicht irre, erlaubt Oracle Ihnen zu sagen select unique..., obwohl ich es vorziehen würde, die Standards so zu machen.
Asgs

3

Nur in Oracle =>

SELECT DISTINCTund SELECT UNIQUEverhalten sich genauso. Während DISTINCT der ANSI SQL-Standard ist, ist UNIQUE eine Oracle-spezifische Anweisung.

In anderen Datenbanken (wie in Ihrem Fall SQL-Server) =>

SELECT UNIQUEist eine ungültige Syntax. UNIQUEist das Schlüsselwort zum Hinzufügen einer eindeutigen Einschränkung für die Spalte.

SELECT DISTINCT


0
  1. Einzigartig war die alte Syntax, während Distinct die neue Syntax ist, die jetzt die Standard-SQL ist.
  2. Unique erstellt eine Einschränkung, dass sich alle einzufügenden Werte von den anderen unterscheiden müssen. Ein Fehler kann auftreten, wenn versucht wird, einen doppelten Wert einzugeben. Deutlich führt zum Entfernen der doppelten Zeilen beim Abrufen von Daten.
  3. Beispiel: SELECT DISTINCT names FROM student;

    TABELLE ERSTELLEN Personen (Id varchar NOT NULL UNIQUE , Name varchar (20));

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.