এমন কোনও কিছুই নেই (যা আমি জানি) যা ডান জোড় দিয়ে করা যায় যা বাম জোড় দিয়ে করা যায় না। তবে কখনও কখনও বাম জোড়গুলির সাথে সিনট্যাক্সটি খারাপ হয়। ধরা যাক আপনার নিম্নলিখিত সারণী রয়েছে:
Persons
ID | Name
Orders
ID | CustomerId | other unimportant stuff
SpecialOrderDetails
ID | OrderId | other stuff
আসুন আমরা আপনার ডাটাবেসে সমস্ত লোকের একটি তালিকা এবং বিশেষ আদেশের বিশদ সহ তাদের যে কোনও আদেশ পেতে হবে তা জানতে হবে (আমরা বলব যে সমস্ত আদেশের বিশেষ অর্ডার বিশদ নেই)। সুতরাং আপনি সাধারণত অর্ডারগুলিতে লোকের কাছ থেকে একটি বাম সংযুক্তি করতেন। তবে তারপরে আপনাকে বিশেষ ক্রমের বিশদে বিশদে যোগ দিতে হবে। আপনি যদি সেখানে কোনও অভ্যন্তরীণ যোগদান ব্যবহার করেন, তবে এটি কার্যকরভাবে বামগুলিকে লোকের কাছ থেকে অভ্যন্তরীণ যোগদানের আদেশ দেয়। আইই: আপনি যা করতে চান এটি কিন্তু কাজ করে না (এটি যার যার বিশেষ অর্ডার নেই তাকে বাদ দেবে):
select p.*, o.*, d.*
from Persons p
left join Orders o on o.CustomerId = p.Id
inner join SpecialOrderDetails d on d.OrderId = o.Id
সুতরাং আপনি এটিকে আবার লিখতে পারেন:
--get all the people without a special order
select p.*, NULL, NULL, ... --NULLs placeholders for all the fields from OrderDetails and SpecialOrderDetails
from Persons p
left join Orders o on o.CustomerId = p.Id
left join SpecialOrderDetails d on d.OrderId = o.Id
where o.Id is null
union
--get all the people with a special order
select p.*, o.*, d.*
from Persons p
inner join Orders o on o.CustomerId = p.Id
inner join SpecialOrderDetails d on d.OrderId = o.Id
হুবহু পরিষ্কার নয় (কোনও মন্তব্য ধরে নেওয়া) না, তবে এটি কাজটি করে। যদি এটি এক-অফের চেয়ে বেশি কিছু হয় (অর্থাত্ কোনও কিছুকে আবার ফিরে আসতে হবে এবং কোনও দিন বজায় রাখতে হবে) ডান সংযুক্তি ব্যবহার করার ফলে উদ্দেশ্যটি কী তা পরিষ্কার হয়ে যেতে পারে।
select p.*, o.*, d.*
from Orders o
inner join SpecialOrderDetails d on d.OrderId = o.Id
right join Persons p on p.Id = o.CustomerId
যা কিছুটা বেশি সংক্ষিপ্ত এবং পরিষ্কার (তবে যদি কেউ এটি পড়তে পারে তবে সঠিকভাবে যোগ দেয়)। নোট করুন যে এটি বাম যোগদানগুলিতে লেখা যেতে পারে তবে এর জন্য একটি নেস্টেড জয়েন প্রয়োজন (যা কম লোকেরা সম্ভবত ডান যোগদানের চেয়ে পরিচিত)।
select p.*, o.*, d.*
from Persons p
left join Orders o
inner join SpecialOrderDetails d on d.OrderId = o.Id
on o.CustomerId = p.Id
এই মুহুর্তে, এটি সবচেয়ে স্পষ্ট কী এবং বেশিরভাগ লোকেরা কী বুঝতে পারে তার একটি পছন্দ (আপনি কি জানতেন না যে কীভাবে সিনট্যাক্স গুগল করবেন যদি আপনি না জানতেন তবে এটি নেস্টেড জয়েন বলা হত?)।
সংক্ষেপে, আপনার কঠোরভাবে সঠিক যোগদানের দরকার নেই তবে এগুলি পড়া সহজতর হতে পারে।