PDA

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)