عندما يتعلق الأمر بالبحث عن البيانات غير المقترنة في Oracle، يمكنك استخدام استعلام NOT EXISTS
للعثور على السجلات التي ليس لها تطابق تام في الحقول المحددة. في حالتك، يمكننا استخدام الاستعلام التالي:
sqlSELECT *
FROM your_table t1
WHERE NOT EXISTS (
SELECT 1
FROM your_table t2
WHERE t1.Id = t2.Id
AND t1.cost = t2.cost
AND t1.hour = t2.hour
AND t1.type = t2.type
AND t1.rowid <> t2.rowid
);
في هذا الاستعلام، نستخدم NOT EXISTS
للعثور على السجلات التي ليس لها نفس Id و cost و hour و type ولكنها ليست نفس الصف (t1.rowid <> t2.rowid
). إذا كنت تستخدم حقيقة أن rowid مميز لكل صف، ستتجنب السجلات المقترنة.
مقالات ذات صلة
يرجى استبدال your_table
بالجدول الفعلي الذي تعمل عليه.
المزيد من المعلومات
بالطبع! لنقم بتوضيح الاستعلام أكثر:
SELECT *
: هذا يعني استرجاع جميع الحقول من الجدول.your_table t1
: هنا، نقوم بتعيين الجدول المراد البحث فيه بالاسمt1
، وهو ما يمكننا استخدامه للإشارة إلى هذا الجدول في باقي الاستعلام.NOT EXISTS (...)
: هذا الجزء من الاستعلام يستخدم للتحقق من عدم وجود سجل آخر يطابق الشروط المحددة داخله. إذا كان الاستعلام الفرعي يرجع نتيجة (أي لديه سجلات)، فإنNOT EXISTS
يعود بقيمة صحيحة وتتم إعادة السجل الأصلي.SELECT 1 FROM your_table t2 ...
: هنا، نقوم بالبحث عن أي سجل آخرt2
في الجدول يطابق الشروط المحددة.WHERE t1.rowid <> t2.rowid
: هذا الشرط يضمن أننا لا نعيد نفس السجل. إذا كانrowid
متميزًا لكل سجل، فهذا يضمن أننا نستبعد السجلات المقترنة.
باختصار، الاستعلام يعود بالسجلات التي لا توجد لديها نفس القيم في الحقول Id و cost و hour و type كما أنها غير مقترنة بالسجلات الأخرى.