سؤال
ولدي 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