Różnica między Select Unique i Select Distinct


145

Myślałem, że to synonomia, ale napisałem w Microsoft SQL:

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

I to się nie udało. Zmieniam to na

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

naprawione. Czy ktoś może wyjaśnić?

Odpowiedzi:


169

SELECT UNIQUEto stara składnia obsługiwana przez język SQL firmy Oracle. Jest synonimem SELECT DISTINCT.

Użyj, SELECT DISTINCTponieważ jest to standardowy SQL i SELECT UNIQUEjest niestandardowy, aw bazach danych innych marek niż Oracle SELECT UNIQUEmoże w ogóle nie być rozpoznawany.


113

Unique to słowo kluczowe używane w dyrektywie Create Table () do oznaczenia, że ​​pole będzie zawierało unikalne dane, zwykle używane dla kluczy naturalnych, kluczy obcych itp.

Na przykład:

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

tj. czyjś numer ubezpieczenia społecznego prawdopodobnie byłby unikalnym polem w Twojej tabeli, ale niekoniecznie kluczem podstawowym.

Distinct jest używany w instrukcji Select, aby powiadomić zapytanie, że unikalne elementy mają być zwracane tylko wtedy, gdy pole zawiera dane, które mogą nie być unikalne.

Select Distinct Emp_LName
From Employee

Możesz mieć wielu pracowników o tym samym nazwisku, ale chcesz mieć tylko inne nazwisko.

Oczywiście, jeśli pole, którego dotyczy zapytanie, zawiera unikalne dane, słowo kluczowe Distinct staje się zbędne.


2
Możesz chcieć, aby numery ubezpieczenia społecznego były niepowtarzalne, ale tak nie jest. Np .: dailyfinance.com/2010/08/12/…
aij

18

select unique jest nieprawidłową składnią dla tego, co próbujesz zrobić

chcesz użyć albo wybierz odrębne, albo wybierz odrębny wiersz

W rzeczywistości nie potrzebujesz nawet wyraźnego / wyraźnego postępu w tym, co próbujesz zrobić. Możesz wyeliminować duplikaty, wybierając odpowiednie parametry instrukcji składającej.

poniższe zapytanie samo w sobie zapewni tylko różne wartości

select col from table1 
union 
select col from table2

jeśli chcesz mieć duplikaty, musisz to zrobić

select col from table1 
union all
select col from table2

1
jeśli się nie mylę, Oracle pozwala ci powiedzieć select unique..., chociaż wolałbym postępować zgodnie ze standardami.
asgs

3

Tylko w Oracle =>

SELECT DISTINCTi SELECT UNIQUEzachowuj się w ten sam sposób. Chociaż DISTINCT jest standardem ANSI SQL, UNIQUE jest instrukcją specyficzną dla Oracle.

W innych bazach danych (jak w twoim przypadku sql-server) =>

SELECT UNIQUEma nieprawidłową składnię. UNIQUEjest słowem kluczowym służącym do dodawania unikalnego ograniczenia w kolumnie.

SELECT DISTINCT


0
  1. Unique to stara składnia, podczas gdy Distinct to nowa składnia, która jest teraz standardowym sql.
  2. Unique tworzy ograniczenie, że wszystkie wartości do wstawienia muszą różnić się od pozostałych. Próba wprowadzenia zduplikowanej wartości może spowodować wystąpienie błędu. Wyraźne powoduje usunięcie zduplikowanych wierszy podczas pobierania danych.
  3. Przykład: SELECT DISTINCT names FROM student;

    UTWÓRZ TABELĘ Osoby (Id varchar NOT NULL UNIQUE , Name varchar (20));

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.