سؤال

ولدي opertaion اتحاد بين جدولين

SELECT ID_1,
       name_1,
       surname_1,
  FROM T_ONE
 UNION
SELECT ID_2,
       name_2,
       surname_2
  FROM TABLE_2

وأريد أن أشارك نتيجة لهذه العملية UNION مع جدول آخر أو حتى مع كل TABLE_1.

وكيف يمكنني التعامل مع هذا الجدول نتيجة جديدة من UNION.

وعلى سبيل المثال بعد UNION سابقة:

RIGHT JOIN TABLE_3
        ON TABLE_3.ID_3 = XXXXXXXXXXXXXXXXXXXX.ID_2

وأنا حقا لا أعرف ما أنا بحاجة لوضع بدلا من XXXXXXXXXXXXXXXX إلى andle الجدول الجديد التي تم إنشاؤها بواسطة UNION.

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

المحلول

استخدم جدول مشتقة مثل "فو" هنا، ومن ثم الانضمام مرة أخرى ولكن كنت أتمنى:

SELECT
    *
FROM
    TABLE_3
    LEFT JOIN
    (
    SELECT ID_1, name_1, surname_1, FROM T_ONE
    UNION --ALL would be more efficient if results do not overlap, as van's comment said
    SELECT ID_2, name_2, surname_2 FROM TABLE_2
    ) foo  ON TABLE_3.ID_3 = foo.ID_1

وPS. استخدام LEFT ينضم: أقل مربكة ثم ينضم RIGHT

نصائح أخرى

وتحتاج إلى توفير الانضمام في كل SELECT:

SELECT ID_1, name_1, surname_1, FROM T_ONE
RIGHT JOIN TABLE_3 ON TABLE_3.ID_3 = T_ONE.ID_1

UNION

SELECT ID_2, name_2, surname_2 FROM TABLE_2
RIGHT JOIN TABLE_3 ON TABLE_3.ID_3 = TABLE_2.ID_2

وأو شيء من هذا القبيل. لا ننسى أن UNION يلغي التكرارات، لذلك إذا كنت تريد مكررة ليتم تضمينها، uyse UNION ALL

SELECT ID_1, name_1, surname_1, FROM T_ONE

from
(SELECT ID_1, name_1, surname_1, FROM T_ONE
UNION 
SELECT ID_2, name_2, surname_2 FROM TABLE_2 ) foo

left join TABLE_3 

ON TABLE_3.ID_3 =foo.ID_2

لتوسيع على إجابة GBN في أعلى بالنسبة لأولئك الذين طلبوا. هنا هو كيف نفعل ذلك مع النقابة باعتبارها الجزء الأول من اليسار الانضمام.

SELECT table3.phone, foo.fname, foo.lname, foo.email
FROM
(SELECT table1.fname,table1.lname,table1.email
    FROM table1
UNION
SELECT table2.fname,table2.lname,table2.email
    FROM table2
) foo
LEFT JOIN table3
ON foo.lname = table3.lname
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top