Разница между выбором уникального и выбором отличительного


145

Я думал, что они были синонимами, но я написал следующее в Microsoft SQL:

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

И это не удалось. Меняя его на

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

починил это. Может кто-нибудь объяснить?

Ответы:


169

SELECT UNIQUEЭто старый синтаксис, поддерживаемый Oracle в SQL. Это синоним с SELECT DISTINCT.

Используйте, SELECT DISTINCTпотому что это стандартный SQL, SELECT UNIQUEнестандартный, и в брендах баз данных, отличных от Oracle, SELECT UNIQUEможет вообще не распознаваться.


113

Unique - это ключевое слово, используемое в директиве Create Table () для обозначения того, что поле будет содержать уникальные данные, обычно используемые для естественных ключей, внешних ключей и т. Д.

Например:

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

т.е. чей-то номер социального страхования, вероятно, будет уникальным полем в вашей таблице, но не обязательно первичным ключом.

Distinct используется в операторе Select, чтобы уведомить запрос о том, что вы хотите, чтобы уникальные элементы возвращались только тогда, когда поле содержит данные, которые могут быть не уникальными.

Select Distinct Emp_LName
From Employee

У вас может быть много сотрудников с одинаковой фамилией, но вам нужна только каждая другая фамилия.

Очевидно, что если запрашиваемое поле содержит уникальные данные, ключевое слово Distinct становится излишним.


2
Возможно, вы хотите, чтобы номера социального страхования были уникальными, но это не так. Например: dailyfinance.com/2010/08/12/…
aij

18

выберите уникальный недопустимый синтаксис для того, что вы пытаетесь сделать

Вы хотите использовать либо выбрать отличную или выбрать отличную

И на самом деле, вам даже не нужно отчетливое / отчетливое в том, что вы пытаетесь сделать. Вы можете устранить дубликаты, выбрав соответствующие параметры оператора объединения.

приведенный ниже запрос сам по себе предоставит только различные значения

select col from table1 
union 
select col from table2

если вы хотите дубликаты, вам придется сделать

select col from table1 
union all
select col from table2

1
если я не ошибаюсь, Oracle позволяет вам сказать select unique..., хотя я бы предпочел действовать по стандартам.
спрашивает

3

Только в Oracle =>

SELECT DISTINCT и SELECT UNIQUE вести себя так же. В то время как DISTINCT является стандартом ANSI SQL, UNIQUE является специфическим оператором Oracle.

В других базах данных (например, sql-server в вашем случае) =>

SELECT UNIQUEневерный синтаксис UNIQUEявляется ключевым словом для добавления уникального ограничения на столбец.

ВЫБЕРИТЕ DISTINCT


0
  1. Уникальным был старый синтаксис, тогда как Distinct - новый синтаксис, который теперь является стандартным sql.
  2. Уникальный создает ограничение, что все значения для вставки должны отличаться от других. Ошибка может быть засвидетельствована, если кто-то пытается ввести повторяющееся значение. Отличительные результаты в удалении повторяющихся строк при получении данных.
  3. Пример: ВЫБЕРИТЕ РАЗЛИЧНЫЕ имена ОТ студента;

    CREATE TABLE Персоны (Идентификатор varchar НЕ НУЛЬ УНИКАЛЬНЫЙ , Имя varchar (20));

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.