FULL OUTER JOIN
 
   SQL Server
   ۸۹۱۶
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۹۰/۱/۱۵
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

مقدمه

FULL OUTER JOIN عملگر اولیه ای نیست به این معنا که بود یا نبود آن باعث نقصان زبان SQL نمی شود. این اتصال ترکیبی از دو اتصال LEFT OUTER و RIGHT OUTER هست.

فرض کنید دو جدول A و B هر کدام دارای مقادیر زیر هستند:

Table A:
i
--
1
2
3

Table B:
j
--
1
2
4

 

نتیجه اتصال خارجی به شرط تساوی دو ستون i و j به شکل زیر خواهد بود:

i           j
----------- -----------
1           1
2           2
NULL        4
   3           NULL

 

و query که توسط آن نتیجه فوق حاصل شده است:

SELECT *
  FROM TableA AS A
       FULL OUTER JOIN TableB AS B
         ON A.i = B.j;

 

مساله

فرض کنید می خواهید نتیجه فوق را بدون کمک FULL OUTER JOIN بدست آوردید. برای این کار نیاز هست علاوه بر سطرهایی که شرط در آنها صدق می کند سطرهایی که Match نشده اند نیز از هر دو جدول به نتیجه اضافه شده و مقدار مربوط به جدول دیگری با NULL پر شود.

راه حل

SELECT a, b
  FROM TableA AS A
       INNER JOIN TableB AS B
          ON A.a = B.b
 UNION

SELECT
a, NULL
  FROM TableA AS A
 WHERE NOT EXISTS

      
(SELECT *
          FROM TableB AS B
         WHERE B.b = A.a)
 UNION
SELECT
NULL, b
  FROM TableB AS B
 WHERE NOT EXISTS

      
(SELECT *
          FROM TableA AS A
         WHERE A.a = B.b);