الانتقال إلى المحتوى الرئيسي

سبب الخطأ "مرجع العمود غامض" وكيفية إصلاحه

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

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

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

مثال: حدد الجدول 1.العمود ، الجدول 2.عمود من الجدول 1 ، الجدول 2;

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

مثال: حدد تي1.العمود ، تي2.عمود من الجدول 1 كـ ر1, جدول2 كـ ر2;

يؤدي تحديد الجدول بشكل صحيح أو استخدام الأسماء المستعارة إلى تجنب الخطأ "مرجع العمود غامض" عند إجراء استعلام قاعدة بيانات ويضمن استرداد البيانات بشكل صحيح من الجداول المطلوبة.

  1. ما هو الخطأ "مرجع العمود غامض"?
  2. لماذا يحدث الخطأ "مرجع العمود غامض"
  3. طرق لإصلاح الخطأ "مرجع العمود غامض"
  4. باستخدام تصفيات العمود
  5. استخدام الأسماء المستعارة للأعمدة
  6. تحليل أسماء الأعمدة متطابقة
  7. التحقق من الاستعلام عن الأعمدة الغامضة

ما هو الخطأ "مرجع العمود غامض"?

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

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

على سبيل المثال ، لنفترض أن لدينا جدولين: "المستخدمون" و "الطلبات" ، ويحتوي كلا الجدولين على عمود "معرف". إذا كتبنا استعلاما يحاول تحديد عمود " المعرف "دون تحديد أي جدول ، فسيحدث الخطأ" مرجع العمود غامض".

  • لتصحيح الخطأ "مرجع العمود غامض" ، يجب عليك تحديد الجدول الذي تريد تحديد العمود منه بشكل صريح. للقيام بذلك ، حدد اسم الجدول أو الاسم المستعار للجدول قبل اسم العمود.
    • على سبيل المثال ، بدلا من كتابة" تحديد معرف ، اسم من المستخدمين ، أوامر حيث معرف = 1 "، تحتاج إلى تحديد من أي جدول لتحديد عمود" معرف "والكتابة" حدد users.id , users.name من المستخدمين ، أوامر حيث users.id = 1". وبالتالي ، يشار إلى أن عمود" المعرف "محدد من جدول" المستخدمين".

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

لماذا يحدث الخطأ "مرجع العمود غامض"

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

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

حدد الجدول1.العمود ، الجدول 2.العمود

من الجدول 1

انضم إلى الجدول 2 على table1.id = table2.id

  • حيث الجدول 1.العمود = 'القيمة'
ومع ذلك ، عند استخدام الاستعلامات المعقدة مع ارتباطات الجدول أو الاستعلامات الفرعية ، قد يكون من الصعب تحديد العمود الذي يشير إليه الاستعلام. في هذه الحالة ، يحدث الخطأ "مرجع العمود غامض".
  • لإصلاح هذا الخطأ ، يمكنك استخدام الطرق التالية:
Указать полное имя столбца, включая имя таблицы или представления перед именем столбца в запросе. Например:
  • SELECT table1.column, table2.column
FROM table1

JOIN table2 ON table1.id = table2.id

WHERE table1.column = 'value' AND table2.column = 'value'

Переименовать один из столбцов, чтобы избежать конфликта имен. Например:

SELECT table1.column AS column1, table2.column

FROM table1
  1. JOIN table2 ON table1.id = table2.id
  2. WHERE table1.العمود = 'القيمة'
  3. استخدم الأسماء المستعارة للجداول أو طرق العرض وحددها قبل اسم العمود. على سبيل المثال:

حدد تي1.العمود ، تي2.العمود

من الجدول 1 كما تي 1

انضم إلى الجدول 2 كـ تي 2 على t1.id = t2.id

أين تي1.العمود = 'القيمة'

  • من المهم أن تضع في اعتبارك أنه عند استخدام الأسماء المستعارة ، يجب أن تكون أسماء الأعمدة فريدة فقط داخل كل اسم مستعار.
  • وبالتالي ، يحدث خطأ "مرجع العمود غامض" عندما يكون هناك عمودين أو أكثر بنفس الأسماء في استعلام سكل. لإصلاحه ، يمكنك تحديد اسم العمود الكامل أو إعادة تسمية الأعمدة أو استخدام الأسماء المستعارة للجداول وطرق العرض.
  • طرق لإصلاح الخطأ "مرجع العمود غامض"

يحدث الخطأ "مرجع العمود غامض" في سكل أثناء استعلام عندما يشير العمود المحدد في التعبير إلى جداول متعددة أو إلى نفس الجدول ، ولكن في مخططات مختلفة.

طرق لإصلاح الخطأ:

حدد الاسم الكامل للعمود باستخدام بناء الجملة " جدول.العمود " أو " المخطط.الجدول.عمود". على سبيل المثال ، بدلا من "العمود" استخدام "الجدول.العمود " أو " المخطط.الجدول.عمود". هذا يسمح لك بحل الغموض وتحديد عمود معين.استخدم الأسماء المستعارة للجداول. عند استخدام الأسماء المستعارة ، يجب تحديد الأعمدة باستخدام هذه الأسماء المستعارة ، مما يسمح لك بتحديد الجدول الذي ينتمي إليه كل عمود.
  • تعديل الاستعلام في مثل هذه الطريقة لتجنب الغموض. على سبيل المثال ، يمكنك تغيير التحديد لتحديد أعمدة محددة فقط ، وتجنب استخدام "*" لتحديد جميع الأعمدة.
  • تسمح لك جميع الطرق المذكورة أعلاه بتصحيح الخطأ" مرجع العمود غامض " وتحديد عمود معين به غموض.
  • باستخدام تصفيات العمود
  • لتجنب الخطأ "مرجع العمود غامض" في استعلام سكل ، يمكنك استخدام تصفيات العمود. تساعدك التصفيات على تحديد الموقع الدقيق للعمود في الجدول.
  • يمكن استخدام التصفيات في الحالات التالية:
  • إذا كان الاستعلام يحتوي على أعمدة بنفس الاسم في جداول مختلفة;
  • إذا كان الجدول يحتوي على اسم مستعار ، للإشارة إلى هذا الجدول بالذات;

إذا كانت هناك جداول متعددة متضمنة في الاستعلام وتحتاج إلى تحديد مصدر البيانات.

تصفيات العمود لها التنسيق التالي: اسم_ الجدول.اسم العمود. يمكن أن يكون اسم الجدول هو اسم الجدول نفسه أو الاسم المستعار الخاص به.

يوجد أدناه مثال على استخدام تصفيات الأعمدة لتجنب الخطأ " مرجع العمود غامض:

جدول"المستخدمون"

جدول"أوامر"

معرف

الاسم

البريد الإلكتروني

المنتج

المبلغ

مثال على استعلام سكل الذي يحتوي على تصفيات العمود:

اختر users.name ، أوامر.المنتج

من المستخدمين

انضم إلى الطلبات على users.id = أوامر.معرف المستخدم;

  • في هذا المثال ، يتم استخدام التصفيات users.name والأوامر.المنتج لتحديد أي جدول لتحديد الأعمدة المناسبة من.
  • استخدام تصفيات العمود هو ممارسة جيدة عند كتابة استعلامات سكل ، وخاصة عند العمل مع عدد كبير من الجداول والاستعلامات المعقدة. تساعد المؤهلات على تجنب الغموض عند تحديد الأعمدة وتحسين قابلية القراءة وفهم الكود.
  • استخدام الأسماء المستعارة للأعمدة

عند استخدام استعلامات سكل ، قد يكون هناك موقف تتطابق فيه أسماء الأعمدة في الجداول. قد يؤدي هذا إلى الخطأ" مرجع العمود غامض " (مرجع عمود غامض). يحدث عندما يحدد الاستعلام اسم عمود موجود في عدة جداول ، ولا يمكن للنظام تحديد العمود الذي ينتمي إليه الارتباط.

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

Применение псевдонимов для столбцов осуществляется с помощью ключевого слова AS. Ниже приведен пример:

    • SELECT orders.order_id AS id, customers.customer_name AS name
  1. FROM orders
    • INNER JOIN customers ON orders.customer_id = customers.customer_id;