الصلة الخارجية اليسرى (الانضمام بين ثلاثة جداول)؟
سؤال
لدي جدول رئيسي يجب أن أحصل على البيانات منه.لدي صلة خارجية يسرى حيث ستتطابق الحقول مع 40% من الوقت.وبعد ذلك لدي صلة أخرى حيث أحتاج إلى مطابقة البيانات من الجدول أ.
هذا هو SQL في الكود الزائف.لن يعمل هذا الاستعلام.
- هذا هو الجزء الذي أريد القيام به ولكنه لا يعمل.و H.COL3 = A.STATE ؟؟؟؟
أنا أعمل مع آي بي إم DB2.
SELECT DISTINCT
APP_NO as app_no,
A.STATE as state
...
... Fields
...
FROM
TABLE_A A
LEFT OUTER JOIN
TABLE_B HIST
ON
HIST.COL1 = A.COL1
, TABLE_C B
LEFT OUTER JOIN
TABLE_D H
ON
H.COL2 = B.COL2
-- This is the part I want to do but doesn't work.
AND
H.COL3 = A.STATE????
WHERE
A.BRANCH = 'Data'
المحلول
أعتقد أنه يمكنك إعادة كتابتها بهذه الطريقة (لكنني قد أقرأ بيانك بشكل خاطئ)
FROM
TABLE_A A LEFT OUTER JOIN TABLE_B HIST ON
HIST.COL1 = A.COL1
LEFT OUTER JOIN TABLE_D H ON
H.COL3 = A.STATE
LEFT OUTER JOIN TABLE_C B ON H.COL2 = B.COL2
WHERE
A.BRANCH = 'Data'
أيضًا، ينص مستند IBM doco الخاص بهذا الخطأ على ما يلي:
جملة ON المرتبطة بعامل تشغيل JOIN أو في عبارة MERGE غير صالحة.توضيح:
يجب أن تشير مراجع الأعمدة في عبارة ON فقط إلى أعمدة الجداول الموجودة في نطاق عبارة ON.
لذا قد أكون مخطئًا، يبدو أن عبارة ON الخاطئة عندما يكون الانضمام الخارجي "H.COL3 = A.STATE" خارج نطاق جملة On لأن الجدول A ليس في هذا النطاق.
نصائح أخرى
وماذا يحدث إذا وضعت على "وH.COL3 = A.STATE" الخاصة بك في جملة WHERE؟