Разница между выбранным уникальным и избранным отличительным - PullRequest
136 голосов
/ 03 декабря 2008

Я думал, что они синонимичны, но я написал следующее в 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

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

Ответы [ 5 ]

164 голосов
/ 03 декабря 2008

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

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

112 голосов
/ 03 декабря 2008

Уникальное ключевое слово, используемое в директиве 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 становится лишним.

18 голосов
/ 03 декабря 2008

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

, который вы хотите использовать, либо выбрать отличный, либо выбрать отличный.

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

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

select col from table1 
union 
select col from table2

если вы хотите получить дубликаты, вам нужно будет сделать

select col from table1 
union all
select col from table2
2 голосов
/ 15 сентября 2017

Только в Oracle =>

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

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

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

ВЫБЕРИТЕ DISTINCT

0 голосов
/ 05 июня 2017
  1. Уникальный был старым синтаксисом, в то время как Отличительный является новым синтаксисом, который теперь является стандартным sql.
  2. Уникальный создает ограничение на то, что все значения, которые нужно вставить, должны отличаться от других. Ошибка может быть засвидетельствована, если кто-то пытается ввести повторяющееся значение. Distinct приводит к удалению дублирующихся строк при получении данных.
  3. Пример: SELECT DISTINCT имена ОТ студента;

    CREATE TABLE Персоны ( Id varchar NOT NULL UNIQUE , Имя varchar (20));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...