"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إجراء LIKE Join في SQL: INSTR أو LIKE أو CONCAT؟

كيفية إجراء LIKE Join في SQL: INSTR أو LIKE أو CONCAT؟

تم النشر بتاريخ 2024-11-04
تصفح:754

How to Perform a LIKE Join in SQL: INSTR, LIKE, or CONCAT?

إجراء LIKE Join في SQL

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

لنفترض أن لديك جدولين، الجدول A والجدول B، وتريد الانضمام إليهما بشرط أن يكون العمود A في الجدول A "مثل" columnB في الجدول B. وهذا يعني أن المطابقة يمكن أن تتضمن القيمة الكاملة في العمود B أو الأحرف قبله أو بعده.

باستخدام INSTR:

إحدى الطرق هي استخدام الدالة INSTR() في شرط الانضمام:

SELECT *
FROM TABLE A
JOIN TABLE B ON INSTR(B.columnB, A.columnA) > 0

استخدام LIKE:

هناك خيار آخر وهو استخدام عامل التشغيل LIKE مع أحرف البدل:

SELECT *
FROM TABLE A
JOIN TABLE B ON B.columnB LIKE '%'  A.columnA  '%'

باستخدام LIKE مع CONCAT:

يمكنك أيضًا ربط رموز أحرف البدل مع العمود القيمة باستخدام الدالة CONCAT():

SELECT *
FROM TABLE A
JOIN TABLE B ON B.columnB LIKE CONCAT('%', A.columnA ,'%')

تحويل الأحرف الكبيرة:

لضمان التطابقات غير الحساسة لحالة الأحرف، يوصى بتحويل قيم الأعمدة إلى أحرف كبيرة قبل مقارنتها:

SELECT *
FROM (SELECT UPPER(A.columnA) 'ua' FROM TABLE A) A
JOIN (SELECT UPPER(B.columnB) 'ub' FROM TABLE B) B ON INSTR(B.ub, A.ua) > 0

اعتبارات الكفاءة:

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

وصلات ANSI مقابل غير ANSI:

تتبع ANSI JOINs بناء الجملة الموحد، في حين أن غير- تستخدم وصلات ANSI بناء جملة أكثر تقليدية. في هذه الحالة، جملة JOIN تعادل جملة WHERE في JOIN غير ANSI:

SELECT *
FROM TABLE A,
     TABLE B
WHERE INSTR(B.columnB, A.columnA) > 0

يوفر استخدام ANSI JOINs ميزة فصل شرط الربط عن شرط التصفية في جملة WHERE.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3