View Full Version : سوال: select رکوردهایی از جدول اول که در جدول دوم دارای کلید خارجی نمی باشند
Marzieh_A
سه شنبه 27 بهمن 1388, 22:45 عصر
چه جوری می تونم اطلاعاتی از جدول 1 رو بخونم که در جدول 2 کلید خارجی نداشته باشه؟
مثلا 2 تا جدول دارم که اولی اطلاعات دانشجویان رو داره و دومی اطلاعات دانشجویانی که ترم آخر هستند. حالا من چه جوری می تونم اطلاعات دانشجویانی که ترم آخر نیستند رو بدست بیارم.
در ضمن اینی که من گفتم مثال بود و دو جدول من دارای ساختار و تعداد ستونهای متفاوت هستند و تنها اشتراکشون همون کلید خارجیه.
Unique
سه شنبه 27 بهمن 1388, 22:57 عصر
سلام
یک راهش اینه
select * from table1 t1 where t1.id not in (select t2.fkey from table2 t2)
این بهتون جواب میده اما اگه تعداد بیش از 100 ها هزار رکورد باشه ممکنه کند عمل کنه ! (البته ممکنه) ، شاید میشد سناریوی جداول را جوری در آورد که با سرعت بیشتری عمل کنه ...
hamed.rezaei
سه شنبه 27 بهمن 1388, 23:05 عصر
سلام;
شما از NOT EXISTS بهتره استفاده کنین
select *
from tbl_student
where NOT exists(select *
from tbl_last
where tbl_last.sid=tbl_student.sid)
محمد سلیم آبادی
سه شنبه 27 بهمن 1388, 23:24 عصر
سلام،
عملی را که قصد انجامش را دارن Difference نام داره که حد اقل از شش روش قابل پیاده سازی است:
LEFT OUTER JOIN
EXCEPT
NOT EXISTS
NOT IN
UNION ALL
OUTER APPLY
همیشه سعی کنید استیل کدهایتان طبق استاندارد ها باشه، نکات زیر را در نوشتن کوئری رعایت کنید:
1. کلید واژه ها را با حروف بزرگ بنویسید.
2. از نام مستعار برای جداول استفاده کنید تا خوانایی و تاپیک کدها ساده تر شود.
3. Alignment یا چیدمان ماده هایی مثل SELECT و FROM و WHERE از راست کلمات باشد.
و ...
SELECT *
FROM tbl_student T1
WHERE NOT EXISTS
(SELECT *
FROM tbl_last T2
WHERE T2.sid = T1.sid)
سلام;
شما از NOT EXISTS بهتره استفاده کنین
select *
from tbl_student
where NOT exists(select *
from tbl_last
where tbl_last.sid=tbl_student.sid)
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.