ความแตกต่างระหว่าง Select Unique และ Select Distinct


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เป็นไวยากรณ์เก่าที่สนับสนุนโดย SQL ของ Oracle SELECT DISTINCTมันเป็นความหมายเหมือนกันกับ

ใช้SELECT DISTINCTเพราะนี่คือ SQL มาตรฐานและSELECT UNIQUEไม่ใช่มาตรฐานและในแบรนด์ฐานข้อมูลอื่นที่ไม่ใช่ Oracle SELECT UNIQUEอาจไม่เป็นที่รู้จัก


113

ที่ไม่ซ้ำกันคือคำหลักที่ใช้ในคำสั่งสร้างตาราง () เพื่อแสดงว่าเขตข้อมูลจะมีข้อมูลที่ไม่ซ้ำกันซึ่งโดยปกติจะใช้สำหรับคีย์ธรรมชาติ, คีย์ต่างประเทศเป็นต้น

ตัวอย่างเช่น:

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

คุณอาจมีพนักงานหลายคนที่มีนามสกุลเหมือนกัน แต่คุณต้องการชื่อที่แตกต่างกันเท่านั้น

เห็นได้ชัดว่าถ้าเขตข้อมูลที่คุณสืบค้นมีข้อมูลที่ไม่ซ้ำกันคำหลักที่แตกต่างจะกลายเป็นสิ่งที่ไม่จำเป็น


2
คุณอาจต้องการหมายเลขประกันสังคมที่ไม่ซ้ำกัน แต่พวกเขาไม่ได้ ตัวอย่างเช่น: dailyfinance.com/2010/08/12/…
aij

18

select unique ไม่ใช่ไวยากรณ์ที่ถูกต้องสำหรับสิ่งที่คุณพยายามทำ

คุณต้องการที่จะใช้เลือกที่แตกต่างกันหรือเลือกที่แตกต่างกัน

และที่จริงแล้วคุณไม่จำเป็นต้องมีความแตกต่างในเรื่องที่คุณพยายามจะทำ คุณสามารถกำจัดรายการที่ซ้ำกันได้โดยเลือกพารามิเตอร์คำสั่ง union ที่เหมาะสม

แบบสอบถามด้านล่างด้วยตัวเองจะให้ค่าที่แตกต่างเท่านั้น

select col from table1 
union 
select col from table2

หากคุณต้องการทำซ้ำคุณจะต้องทำ

select col from table1 
union all
select col from table2

1
ถ้าฉันไม่ผิดออราเคิลอนุญาตให้คุณพูดselect unique...แม้ว่าฉันจะชอบทำตามมาตรฐาน
asgs

3

เฉพาะใน Oracle =>

SELECT DISTINCTและSELECT UNIQUEประพฤติเช่นเดียวกัน ในขณะที่ DISTINCT เป็นมาตรฐาน ANSI SQL UNIQUE เป็นคำสั่งเฉพาะของ Oracle

ในฐานข้อมูลอื่น ๆ (เช่น sql-server ในกรณีของคุณ) =>

SELECT UNIQUEเป็นไวยากรณ์ที่ไม่ถูกต้อง UNIQUEเป็นคำหลักสำหรับการเพิ่มข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์

เลือก DISTINCT


0
  1. ไม่ซ้ำกันคือไวยากรณ์เก่าในขณะที่Distinctเป็นไวยากรณ์ใหม่ซึ่งขณะนี้เป็น Standard sql
  2. ที่ไม่ซ้ำกันสร้างข้อ จำกัด ที่ค่าทั้งหมดที่จะแทรกจะต้องแตกต่างจากค่าอื่น ๆ สามารถพบข้อผิดพลาดหากพยายามป้อนค่าที่ซ้ำกัน ผลลัพธ์ที่แตกต่างในการลบแถวที่ซ้ำกันในขณะที่ดึงข้อมูล
  3. ตัวอย่าง: SELECT DISTINCTชื่อจากนักเรียน;

    สร้างตารางบุคคล (Id varchar ไม่ใช่ค่าไม่ซ้ำกัน , ชื่อ varchar (20));

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.