DISTINCT

من موسوعة حسوب
< SQL
مراجعة 11:19، 13 يناير 2018 بواسطة Nourtam (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

تستخدم العبارة DISTINCT للحصول على قيمٍ فريدةٍ غير مكررة، وغالبًا ما تستخدم في استعلام SELECT للحصول على سجلات لا تتكرر القيم فيما بينها، إذ يصبح الاستعلام بالشكل الآتي:

SELECT DISTINCT columns
FROM table;

مثال

إن كان الجدول الآتي patients موجودًا في قاعدة البيانات:

Doctor Section Age Patient PatientID
Nasser Cardiology 76 Salem 1029
Abd Allah Neurology 17 Hasan 896
Reem Maternity 23 Nadine 964
Fateh Cardiology 65 Rami 1070
Kareem Neurology 19 Abd al-Rahim 1150
Hadi Critical Care 65 Roushd 1097
Reem Maternity 27 Sana 1034
Abd Allah Neurology 49 Helen 963
Hadi Critical Care 58 Ahmad 1154
Kareem Neurology 40 Maher 1069
Amnah Maternity 30 Zeina 1028
Fateh Cardiology 55 Sarah 1180
Hadi Critical Care 23 Fadi 1076

فللحصول على أسماء الأقسام الخاصة بالمرضى Section دون أي تكرار يُستخدَم الاستعلام الآتي:

SELECT DISTINCT Section
FROM patients;

وتظهر النتائج بالشكل الآتي:

Section
Cardiology
Neurology
Maternity
Critical Care

الحصول على سجل واحد فقط

تُمكن الاستفادة من عبارة DISTINCT للحصول على سجلٍ واحدٍ فقط لكل مجموعةٍ من السجلات التي تحتوي نفس القيمة، ولضمان الحصول على السجل المطلوب تستخدم عبارة ORDER BY في الاستعلام، ليصبح بالشكل:

SELECT DISTINCT ON (column) columns
FROM table
ORDER BY columns;

مثال

إن كان الجدول weather الآتي موجودًا في قاعدة البيانات:

Report Time Location
Mostly Cloudy 4:30 Aleppo
Showers 4:30 Damascus
Partly Cloudy 13:00 Damascus
Showers 5:00 Aleppo
Partly Cloudy 17:00 Aleppo
Sunny 15:00 Damascus
Showers 12:30 Aleppo

عند تنفيذ الاستعلام الآتي:

SELECT DISTINCT ON (Location) Location, Time, Report
FROM weather
ORDER BY Location, Time DESC;

تُجلب السجلات الأحدث (اعتمادًا على الترتيب الزمني التنازليّ) لكل موقعٍ دون تكرار أيّ منها، وتظهر النتائج:

Report Time Location
Partly Cloudy 17:00 Aleppo
Sunny 15:00 Damascus

التوافقية

SQLServer SQLite Oracle PostgreSQL MySQL
نعم نعم نعم نعم نعم

مصادر