حذف نتایج تکراری با DISTINCT در SQL اکسس
هنگام اجرای کوئریها روی پایگاه داده، بسیار پیش میآید که دادههای تکراری و زائد در خروجی ظاهر شوند. دستور DISTINCT در SQL اکسس ابزار اصلی شما برای فیلتر کردن این موارد تکراری و استخراج لیستی کاملاً یکتا و تمیز از اطلاعات است.
دستور DISTINCT چیست؟
کلمه کلیدی DISTINCT عبارتی در زبان SQL است که بلافاصله پس از دستور SELECT نوشته میشود. وظیفه آن صدور فرمان به موتور پایگاه داده اکسس است تا سطرهایی که در ستونهای انتخابشده دقیقاً مشابه هستند را فقط یکبار نمایش دهد.
چرا استفاده از آن مهم است؟
این دستور در موارد زیر کاربردی حیاتی دارد:
- تولید گزارشهای خلاصهشده (مثلاً استخراج لیست شهرهایی که مشتریان در آنها ساکن هستند بدون تکرار نام شهر).
- پر کردن لیستهای کشویی (Combo Box) در فرمهای VBA برای جلوگیری از سردرگمی کاربر با گزینههای تکراری.
- پاکسازی دادههای خام قبل از انجام عملیاتهای پیچیده مانند پیوند (JOIN) بین جداول.
ساختار دستورات
مکان قرارگیری این کلمه کلیدی مستقیماً بعد از SELECT است:
SELECT DISTINCT ColumnName1, ColumnName2
FROM TableName;
مثالها در SQL
فرض کنید میخواهید نام تمام کشورهای منحصربهفردی که در جدول مشتریان ثبت شدهاند را استخراج کنید:
SELECT DISTINCT Country
FROM Customers;
مثالهای کاربردی VBA
استفاده از این تکنیک در کدهای اکسس VBA برای پردازش رکوردستها بسیار رایج است:
Option Explicit
Sub GetUniqueDepartments()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Set db = CurrentDb()
' فقط نام دپارتمانهای غیرتکراری را دریافت میکنیم
strSQL = "SELECT DISTINCT DepartmentName FROM Employees"
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rs.EOF Then
rs.MoveFirst
Do Until rs.EOF
Debug.Print rs!DepartmentName
rs.MoveNext
Loop
End If
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
توضیح کد
در این قطعه کد VBA، ما رشته SQL را بهگونهای میسازیم که شامل SELECT DISTINCT باشد. سپس رکوردست را در حالت فقطخواندنی باز میکنیم. بهدلیل استفاده از این کلیدواژه، خروجی در پنجره Immediate تنها نام یکتای دپارتمانها را چاپ میکند؛ حتی اگر دهها کارمند در یک دپارتمان باشند، نام آن دپارتمان فقط یکبار چاپ میشود.
خطاهای رایج
- استفاده از فیلدهای از نوع Long Text (Memo) در کنار این دستور ممکن است در نسخههای قدیمیتر اکسس باعث قطع شدن متن یا بروز خطا شود.
- تصور اینکه DISTINCT فقط روی یک ستون عمل میکند. وقتی چند ستون انتخاب شوند، سیستم ترکیب تمام آن ستونها را با هم مقایسه کرده و در صورتی که کل سطر تکراری باشد، آن را حذف میکند.
بهترین روشها (Best Practices)
- فقط زمانی از این کلمه کلیدی استفاده کنید که واقعاً به آن نیاز دارید. موتور پایگاه داده برای یافتن تکراریها باید دادهها را مرتب و مقایسه کند که این کار نیازمند پردازش اضافه و زمانبر است.
- برای گرفتن خروجی یکتا بر اساس کل فیلدهای جدول در اکسس، میتوانید از دستور اختصاصی
DISTINCTROWنیز بهره ببرید.
موضوعات مرتبط
- دستورات GROUP BY و توابع تجمیعی
- کوئریهای تو در تو و پارامتری
سؤالات متداول درباره حذف رکوردهای تکراری در اکسس
دستور DISTINCT در اکسس دقیقاً چه کاری انجام میدهد؟
این دستور نتایج خروجی یک کوئری SELECT را فیلتر میکند تا مقادیر تکراری حذف شده و فقط مجموعهای یکتا از رکوردها بازگردانده شود.
عملکرد DISTINCT در زمان انتخاب چند ستون چگونه است؟
اگر چند ستون انتخاب کنید، سیستم ترکیب تمام آن ستونها را میسنجد. یک رکورد تنها زمانی حذف میشود که در تمامی ستونهای انتخابشده، مقداری دقیقاً مشابه رکورد دیگر داشته باشد.
آیا استفاده از این دستور سرعت اجرای کوئری را کاهش میدهد؟
بله، زیرا پایگاه داده اکسس برای شناسایی رکوردهای تکراری مجبور است خروجی را مرتبسازی و مقایسه کند که نیازمند پردازش و حافظه بیشتری است.
تفاوت بین DISTINCT و DISTINCTROW چیست؟
دستور DISTINCT فقط ستونهایی که در کوئری فراخوانی شدهاند را مقایسه میکند، اما DISTINCTROW یکتایی را بر اساس ساختار کل رکورد در جدول اصلی میسنجد.
آیا میتوان از COUNT(DISTINCT) در اکسس استفاده کرد؟
خیر، برعکس SQL Server، محیط اکسس بهصورت پیشفرض از تابع COUNT(DISTINCT) پشتیبانی نمیکند. برای شمارش آیتمهای یکتا باید از سابکوئریها (Subqueries) استفاده کنید.
جمعبندی
استفاده از دستور DISTINCT یکی از مهارتهای اولیه و ضروری در زبان SQL است. با کمک این قابلیت میتوانید خروجیهای خود را پاکسازی کرده، فرمهای کاربری خود را حرفهایتر طراحی کنید و از بروز باگهای منطقی ناشی از دادههای تکراری در برنامههای VBA جلوگیری نمایید.
بیشتر بخوانید
آموزش کار با کوئریهای ذخیرهشده و Viewها در SQL اکسس
آموزش مرتبسازی نتایج کوئری با ORDER BY در SQL اکسس
انواع داده و تعریف فیلدها در SQL اکسس: راهنمای جامع
کوئری جدول متقاطع با TRANSFORM و PIVOT در SQL اکسس
کوئری پارامتری در SQL اکسس با QueryDef و VBA