Es gibt nichts (wovon ich weiß), das mit einer rechten Verknüpfung durchgeführt werden kann, das nicht mit einer linken Verknüpfung durchgeführt werden kann. Aber manchmal ist die Syntax mit Left Joins hässlicher. Angenommen, Sie haben die folgenden Tabellen:
Persons
ID | Name
Orders
ID | CustomerId | other unimportant stuff
SpecialOrderDetails
ID | OrderId | other stuff
Angenommen, Sie benötigen eine Liste aller Personen in Ihrer Datenbank und aller Bestellungen, die sie mit speziellen Bestelldetails haben (wir werden sagen, dass nicht alle Bestellungen spezielle Bestelldetails haben). Normalerweise führt man also einen Link-Join von Personen zu Befehlen durch. Dann müssen Sie jedoch spezielle Bestelldetails angeben. Wenn Sie dort einen inneren Join verwenden, wird der linke Join von Personen zu Befehlen in einen inneren Join umgewandelt. IE: Dies ist, was Sie tun möchten, aber nicht funktioniert (es wird jeden ausschließen, der keine spezielle Bestellung hat):
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
Sie könnten es also so umschreiben:
--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
Nicht genau klar (vorausgesetzt, keine Kommentare), aber es macht den Job. Wenn dies mehr als eine einmalige Aktion ist (dh, jemand muss eines Tages zurückkehren und warten), könnte die Verwendung eines richtigen Joins klarer machen, was die Absicht war.
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
Was etwas prägnanter und klarer ist (aber nur, wenn jeder, der es liest, die richtigen Verknüpfungen versteht). Beachten Sie, dass dies mit Left-Joins geschrieben werden kann, jedoch ein verschachtelter Join erforderlich ist (mit dem wahrscheinlich weniger Leute vertraut sind als mit Right-Joins).
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
An diesem Punkt können Sie auswählen, was am klarsten ist und was die meisten Leute verstehen werden.
Kurz gesagt, Sie benötigen nicht unbedingt die richtigen Verknüpfungen, aber sie erleichtern möglicherweise das Lesen.