PDA

View Full Version : Inner join



mehdi58
چهارشنبه 30 فروردین 1385, 09:41 صبح
با سلام
من دو تا جدول دارم به نامهای Table1 و Table2 که Field1 کلید اصلی Table1 و کلید خارجی Table2 محسوب میشه.
حالا من میخوام به کمک دستور SQL زیر تمام عناوین رکوردها یی رو که در Table1 وجود دارن ولی در Table2 نیستن رو ببینم اما با دستور زیر جواب نمیده !!!
به نظر شما مشکل از کجاست؟؟

SELECT Table1.title
FROM ‏‏Table1 INNER JOIN Table2
ON
Table1.Field1 <> Table2. Field1

reza_rad
چهارشنبه 30 فروردین 1385, 10:10 صبح
از این استفاده کن :


select table1.* from table1 where field1 not in (select field1 from table2)

mehdi58
پنج شنبه 31 فروردین 1385, 07:45 صبح
متشکرم
اما میخوام بدونم دستور SQL خودم چه ایرادی داره!!!
یعنی معنای اون SQL چیه؟؟؟

AminSobati
پنج شنبه 31 فروردین 1385, 22:39 عصر
در دستوری که شما نوشتین، وقتی رکورد اول از Table1 با رکورد اول از Table2 مساوی نباشه، بنا بر شرط شما، این دو رکورد با هم Match میشن و در Result ظاهر خواهند شد.
دستوری که reza_rad نوشتن، منطق Outer Join داره و وقتی موقع اجرا در Query Analyzer کلید CTRL+L رو بزنید، Plan نشون میده که در اصل Outer Join انجام شده. اما توصیه من این هست که از ابتدا اون رو به شکل Outer بنویسید چون Query Optimizer با این روش تصمیم گیریهای بهتری انجام میده:

SELECT Table1.* FROM Table1 LEFT OUTER JOIN Table2
ON Table1.Field1=Table2.Field1
WHERE Table2.Field1 IS NULL

mehdi58
جمعه 01 اردیبهشت 1385, 07:23 صبح
متشکر و ممنون