Select Unique和Select Distinct之间的区别

use*_*712 138 sql sql-server

我认为这些是同义的,但我在Microsoft SQL中写了以下内容:

Select Unique col from 
     (select col from table1 union select col from table2) alias
Run Code Online (Sandbox Code Playgroud)

它失败了.把它改成

Select Distinct col from 
     (select col from table1 union select col from table2) alias
Run Code Online (Sandbox Code Playgroud)

固定它.谁能解释一下?

Bil*_*win 165

SELECT UNIQUE是Oracle的SQL风格支持的旧语法.它是同义词SELECT DISTINCT.

使用SELECT DISTINCT是因为这是标准SQL,并且SELECT UNIQUE是非标准的,并且在Oracle之外的数据库品牌中SELECT UNIQUE可能根本不被识别.


Ben*_*ter 112

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) 
)
Run Code Online (Sandbox Code Playgroud)

即,某人的社会安全号码可能是您表格中的唯一字段,但不一定是主键.

在Select语句中使用Distinct来通知查询您只希望在字段包含可能不唯一的数据时返回唯一项.

Select Distinct Emp_LName
From Employee
Run Code Online (Sandbox Code Playgroud)

您可能有许多具有相同姓氏的员工,但您只需要每个不同的姓氏.

显然,如果您要查询的字段包含唯一数据,则Distinct关键字将变得多余.

  • 您可能希望社会安全号码是唯一的,但它们不是.例如:http://www.dailyfinance.com/2010/08/12/your-social-security-number-may-not-be-unique-to-you/ (2认同)

mso*_*son 18

对于您要执行的操作,select unique不是有效语法

你想使用select distinct或select distinctrow

实际上,你甚至不需要在你想要做的事情上明确/不确定.您可以通过选择适当的union语句参数来消除重复项.

以下查询本身只会提供不同的值

select col from table1 
union 
select col from table2
Run Code Online (Sandbox Code Playgroud)

如果你确实想要重复,你将不得不这样做

select col from table1 
union all
select col from table2
Run Code Online (Sandbox Code Playgroud)


Som*_*luk 5

仅在 Oracle =>

SELECT DISTINCTSELECT UNIQUE以同样的方式行事。DISTINCT 是 ANSI SQL 标准,而 UNIQUE 是 Oracle 特定的语句。

在其他数据库中(如您的情况下的 sql-server)=>

SELECT UNIQUE是无效的语法。UNIQUE是在列上添加唯一约束的关键字。

选择不同