سؤال

أعتقد أنني ذاهب إلى أسفل المسار الصحيح مع هذا واحد ... يرجى تحمل معي كما بلدي SQL ليس أعظم

أحاول الاستعلام عن قاعدة بيانات لتحديد كل شيء من جدول واحد حيث لا توجد خلايا معينة في مكان آخر. هذا كثير لا معنى له الكثير ولكني آمل أن تكون هذه القطعة من التعليمات البرمجية

SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

لذلك لدي جدول واحد مع قائمة الموظفين وتفاصيلهم. ثم طاولة أخرى مع بعض التفاصيل الأخرى، بما في ذلك اسمها. حيث الاسم ليس في جدول EOTM_DYN، وهذا يعني أنه لا يوجد أي دخول لهم، أود أن أرى بالضبط من هم، أو بمعنى آخر، نرى ما هو بالضبط مفقود.

إرجاع الاستعلام أعلاه أي شيء، لكنني أعلم أن هناك أسماء عشرة عاشرة مفقودة لذلك من الواضح أنني لم أحمل ذلك.

هل أستطيع مساعدتك؟

هل كانت مفيدة؟

المحلول

لم تنضم إلى الجدول في استفسارك.

سيعود الاستعلام الأصلي دائما أي شيء ما لم تكن هناك سجلات على الإطلاق eotm_dyn, في هذه الحالة سيعود كل شيء.

على افتراض أن هذه الجداول يجب انضمامها employeeID, ، استخدم ما يلي:

SELECT  *
FROM    employees e
WHERE   NOT EXISTS
        (
        SELECT  null 
        FROM    eotm_dyn d
        WHERE   d.employeeID = e.id
        )

يمكنك الانضمام إلى هذه الجداول مع LEFT JOIN الكلمة الأساسية وتصفية خارج NULL، ولكن هذا من المحتمل أن يكون أقل كفاءة من استخدام NOT EXISTS.

نصائح أخرى

SELECT * FROM employees WHERE name NOT IN (SELECT name FROM eotm_dyn)

أو

SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM eotm_dyn WHERE eotm_dyn.name = employees.name)

أو

SELECT * FROM employees LEFT OUTER JOIN eotm_dyn ON eotm_dyn.name = employees.name WHERE eotm_dyn IS NULL

يمكنك القيام بانضمام يساري وتأكيد العمود المربوط غير فارغ.

مثال:

SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
SELECT * from employees
WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

لا ترجع أي سجلات إلا eotm_dyn فارغ. تحتاج إلى نوع من المعايير SELECT name FROM eotm_dyn مثل

SELECT * from employees
WHERE NOT EXISTS (
    SELECT name FROM eotm_dyn WHERE eotm_dyn.employeeid = employees.employeeid
)

على افتراض أن الجدولين مرتبطان بعلاقة مفاجئة أجنبية. عند هذه النقطة، يمكنك استخدام مجموعة متنوعة من الخيارات الأخرى بما في ذلك الانضمام الأيسر. عادة ما يتعامل معهم عادة نفسها في معظم الحالات.

يمكنك أيضا إلقاء نظرة على هذا السؤال ذات الصلة. وبعد أبلغ المستخدم أن المستخدم أن استخدام مرغوب قدم أداء أفضل من استخدام استعلام فرعي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top