+1 امتیاز
قبل در برنامه نویسی توسط (7.2هزار امتیاز)

همانگونه که می دانیم می توان INNER JOIN به صورت WHERE CLAUSE نیز نوشت. دو کوئری زیر یک معنی می دهند:

SELECT *  FROM t1, t2 WHERE t1.f1 = t2.f2;

SELECT *  FROM t1 INNER JOIN t2 ON t1.f1 = t2.f2;

آیا می توان outer join ها را نیز به این روش نوشت؟

قبل توسط (1.1هزار امتیاز)
فکر کنم FULL OUTER JOIN با استفاده از query به این راحتی بدست بیاد، احتمالا یا باید از دستورات مخصوص RDBMS استفاده کرد یا توابع.
قبل توسط (7.2هزار امتیاز)
من با عملگر (+) آشنام واسه این کار که برای LEFT JOIN و RIGHT JOIN معادل دارد و اتفاقا راهکاری برای FULL JOIN ندارد!

1 پاسخ

+2 امتیاز
قبل توسط (7.2هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

در اوراکل یک عملگر با نام outer join operator وجود دارد که نماد آن (+) است.

برای اینکه بخواهیم تمام رکوردهای جدول t1 را داشته باشیم می توانیم آن را در where clause کنار فیلد جدول t2 بگذاریم. یعنی عبارات زیر یک معنی یکسان و خروجی یکسان برای جداول تستی تعریف شده در پاسخ https://javabyab.com/1002 دارند:

 

SELECT *
  FROM test_mohi t1 LEFT JOIN test_mohi_2 t2 ON t1.first_field = t2.first_field;

SELECT *
  FROM test_mohi t1, test_mohi_2 t2
 WHERE t1.first_field = t2.first_field(+);


FIRST_FIELD SECOUND_FIELD     THIRD_ FIRST_FIELD_1 SECOUND_FIELD_1   THIRD__1
----------- ------------- ---------- ------------- --------------- ----------
          1             2          4             1               2          3
          1             1          5             1               2          3
          2             0         10                                         
          2             2          5                                         
          2             1          6                                         


5 rows selected.

لازم به ذکر است که این عملگر برای FULL JOIN معادل ندارد. یعنی کوئری زیر اشتباه است:

SELECT *
  FROM test_mohi t1, test_mohi_2 t2
 WHERE t1.first_field(+) = t2.first_field(+)
                         *
Error at line 3
ORA-01468: a predicate may reference only one outer-joined table

 

سوالات مشابه

+1 امتیاز
1 پاسخ 800 بازدید
+1 امتیاز
1 پاسخ 392 بازدید
+1 امتیاز
1 پاسخ 960 بازدید
+1 امتیاز
1 پاسخ 493 بازدید
0 امتیاز
1 پاسخ 3.2هزار بازدید
+1 امتیاز
1 پاسخ 712 بازدید
0 امتیاز
1 پاسخ 1.0هزار بازدید
+1 امتیاز
1 پاسخ 478 بازدید
...