العثور على المفقودين رسائل البريد الإلكتروني في SQL Server

StackOverflow https://stackoverflow.com/questions/57243

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أحاول أن أفعل شيئا فعلته من مليون مرة و هو لا يعمل, هل يمكن لأحد أن يقول لي لماذا ؟

لدي جدول للأشخاص الذين أرسلت في السير الذاتية ، ولها عنوان البريد الإلكتروني الخاصة بهم في ذلك...

أريد معرفة ما إذا كان أي من هؤلاء الناس لم توقع على موقع ويب.على aspnet_Membership الجدول يحتوي على جميع الناس الذين سجلوا على الموقع.

هناك 9472 الباحثين عن عمل من عناوين البريد الإلكتروني.

هذا الاستعلام تنتج 1793 النتائج:

select j.email from jobseeker j
join aspnet_Membership m on j.email = m.email

هذا يشير إلى أنه ينبغي أن يكون هناك 7679 (9472-1793) رسائل البريد الإلكتروني من الناس الذين ليسوا وقعت على موقع ويب.منذ عام 1793 منهم لم تطابق ، أتوقع البقية لا تتطابق مع...ولكن عندما أفعل الاستعلام من أجل أن أحصل على أي شيء!

لماذا هذا الاستعلام تعطيني شيئا؟??

select j.email 
from jobseeker j
where j.email not in (select email from aspnet_Membership)

أنا لا أعرف كيف يمكن أن لا يعمل - تقول في الأساس "تظهر لي جميع رسائل البريد الإلكتروني التي يتم الباحثين عن عمل في الجدول, ولكن ليس في aspnet_Membership الجدول...

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

المحلول

لدينا مشكلة مماثلة في الآونة الأخيرة حيث الاستعلام الفرعي كان عائدا قيم فارغة في بعض الأحيان.ثم في بيان يعامل null بطريقة غريبة, أعتقد دائما مطابقة قيمة ، لذلك إذا قمت بتغيير الاستعلام الخاص بك إلى:

select j.email 
from jobseeker j
where j.email not in (select email from aspnet_Membership
                      where email is not null)

فإنه قد عمل....

نصائح أخرى

هل يمكن أن يكون الكثير من التكرارات هناك.أنا لا أرى الاستعلام خطأ من على قمة رأسي ، ولكن قد حاول أن تكتب على هذا النحو:

SELECT j.email
FROM jobseeker j
LEFT JOIN aspnet_Membership m ON m.email = j.email
WHERE m.email IS NULL

يمكنك أيضا رمي مجموعة أو متميزة في التخلص من التكرارات.

هل يمكن استخدام exists بدلا من in مثل هذا:

Select J.Email
From Jobseeker j
Where not exists (Select * From aspnetMembership a where j.email = a.email)

يجب أن تحصل على أداء أفضل وتجنب 'غريب' السلوك (وأظن أن تفعل مع القيم null/النتائج) عند استخدام in.

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