استعلام SQL استخدام مثل فقط إذا كانت لا تطابق موجود ؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أواجه مشكلة مع استعلام الذي يستخدم حاليا

LEFT JOIN weblog_data AS pwd 
  ON (pwd.field_id_41 != '' 
  AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%'))

ومع ذلك أنا اكتشاف أن كنت بحاجة إلى استخدام فقط أنه إذا كان هناك أي تطابق الأولى.ما يحدث هو أن الاستعلام يتم غمس مزدوجة بسبب استخدام LIKE, حتى لو كانت الاختبارات تطابق أولا ثم أنها سوف تجنب غمس مزدوجة المسألة.أي شخص يمكن أن توفر لي مع أي مزيد من التوجيه ؟

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

المحلول

هذا يبدو وكأنه كنت ترغب في الانضمام إلى الجداول مستعارة كما pwd و ewd في مقتطف تستند أولا على تطابق تام ، وإذا فشل ذلك ، ثم على مثل المقارنة لديك الآن.

جرب هذا:

LEFT JOIN weblog_data AS pwd1 ON (pwd.field_id_41 != '' AND pwd.field_id_41 = ewd.field_id_32)
LEFT JOIN weblog_data AS pwd2 ON (pwd.field_id_41 != '' AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%'))

ثم في تحديد شرط استخدام شيء مثل هذا:

select
  isnull(pwd1.field, pwd2.field)

ومع ذلك ، إذا كنت تتعامل مع الميدانية التي يمكن أن تكون فارغة في pwd, التي من شأنها أن تسبب مشاكل ، ينبغي العمل على الرغم من:

select
  case pwd1.nonnullfield is null then pwd2.field else pwd1.field end

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

نصائح أخرى

أنت تتحدث عن ماس كهربائى التقييم.

نلقي نظرة على هذه المقالة قد تساعدك:http://beingmarkcohen.com/?p=62

باستخدام tsql ضمن تشغيل تطابق تام ، لفحص الأسطوانات الصفوف == 0, إذا كان الأمر كذلك, تشغيل مثل ، وإلا لا تشغيل مثل أو إضافة مثل النتائج أدناه الدقيق المباريات.

أستطيع أن أفكر فقط من يفعل ذلك في التعليمات البرمجية.البحث عن تطابق تام ، إذا كانت النتيجة هي فارغة ، ابحث عن مثل.خيار واحد هو حيث ضمن هذا الاستعلام هذه أن حيث ({عد من تطابق}=0) ، وفي هذه الحالة ، لن تذهب من خلال المقارنة مع مثل إذا تطابق بإرجاع أكثر من 0 النتائج.ولكن غير فعالة بشكل رهيب...ناهيك عن حقيقة أن استخدامه مجدية في رمز صعبة نوعا ما.

أود الذهاب إذا(عد من تطابق = 0) ثم فعل مثل استعلام آخر فقط استخدام النتيجة من تطابق تام.

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