সেখানে মূলত যে 3 পন্থা হল: not exists, not inএবং left join / is null।
বাম যোগদান করুন নাল সাথে
SELECT l.*
FROM t_left l
LEFT JOIN
t_right r
ON r.value = l.value
WHERE r.value IS NULL
না
SELECT l.*
FROM t_left l
WHERE l.value NOT IN
(
SELECT value
FROM t_right r
)
বিদ্যমান না
SELECT l.*
FROM t_left l
WHERE NOT EXISTS
(
SELECT NULL
FROM t_right r
WHERE r.value = l.value
)
কোনটা ভালো? এই নির্দিষ্ট প্রশ্নের উত্তরটি নির্দিষ্ট নির্দিষ্ট আরডিবিএমএস বিক্রেতাদের কাছে ভেঙে ফেলা ভাল। সাধারণভাবে বলতে গেলে, select ... where ... in (select...)সাব-কোয়েরিতে রেকর্ডের সংখ্যার বিশালতা অজানা থাকলে ব্যবহার করা উচিত one কিছু বিক্রেতারা আকার সীমাবদ্ধ করতে পারে। উদাহরণস্বরূপ ওরাকল এর সীমা এক হাজার । করণীয় সর্বোত্তম জিনিস তিনটি চেষ্টা করে দেখুন এবং কার্যকর করার পরিকল্পনাটি দেখান।
বিশেষত PostgreSQL গঠন করুন, এর এক্সিকিউশন প্ল্যান NOT EXISTSএবং LEFT JOIN / IS NULLএকই রকম। আমি ব্যক্তিগতভাবে NOT EXISTSবিকল্পটি পছন্দ করি কারণ এটি আরও ভাল উদ্দেশ্য দেখায়। সব পরে শব্দার্থিক যে আপনি একটি রেকর্ড যে তার PK খুঁজতে চান উপস্থিত না থাকার বি ।
পুরাতন তবে এখনও সোনার, যদিও পোস্টগ্রাএসকিউএল-তে নির্দিষ্ট: https://explainextended.com/2009/09/16/not-in-vs-not-exists-vs-left-join-is-null-postgresql/