استعلام SQL استخدام مثل فقط إذا كانت لا تطابق موجود ؟
سؤال
أواجه مشكلة مع استعلام الذي يستخدم حاليا
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) ثم فعل مثل استعلام آخر فقط استخدام النتيجة من تطابق تام.