Để đưa ra một ví dụ trong đó RIGHT JOIN
có thể hữu ích.
Giả sử có ba bảng dành cho người, vật nuôi và phụ kiện thú cưng. Mọi người có thể tùy chọn có vật nuôi và những vật nuôi có thể tùy chọn có phụ kiện
CREATE TABLE Persons
(
PersonName VARCHAR(10) PRIMARY KEY
);
INSERT INTO Persons
VALUES ('Alice'),
('Bob'),
('Charles');
CREATE TABLE Pets
(
PetName VARCHAR(10) PRIMARY KEY,
PersonName VARCHAR(10)
);
INSERT INTO Pets
VALUES ('Rover',
'Alice'),
('Lassie',
'Alice'),
('Fifi',
'Charles');
CREATE TABLE PetAccessories
(
AccessoryName VARCHAR(10) PRIMARY KEY,
PetName VARCHAR(10)
);
INSERT INTO PetAccessories
VALUES ('Ball', 'Rover'),
('Bone', 'Rover'),
('Mouse','Fifi');
Nếu yêu cầu là để có được một kết quả liệt kê tất cả mọi người không phân biệt có hay không mà họ sở hữu một con vật cưng và thông tin về bất kỳ vật nuôi mà họ sở hữu mà còn có các phụ kiện .
này không hoạt động (Không bao gồm Bob)
SELECT P.PersonName,
Pt.PetName,
Pa.AccessoryName
FROM Persons P
LEFT JOIN Pets Pt
ON P.PersonName = Pt.PersonName
INNER JOIN PetAccessories Pa
ON Pt.PetName = Pa.PetName;
này không hoạt động (Bao gồm Lassie)
SELECT P.PersonName,
Pt.PetName,
Pa.AccessoryName
FROM Persons P
LEFT JOIN Pets Pt
ON P.PersonName = Pt.PersonName
LEFT JOIN PetAccessories Pa
ON Pt.PetName = Pa.PetName;
này không làm việc (nhưng cú pháp là ít phổ biến hơn vì nó đòi hỏi hai điều khoản ON
liên tiếp để đạt được thứ tự hợp lý mong muốn)
SELECT P.PersonName,
Pt.PetName,
Pa.AccessoryName
FROM Persons P
LEFT JOIN Pets Pt
INNER JOIN PetAccessories Pa
ON Pt.PetName = Pa.PetName
ON P.PersonName = Pt.PersonName;
Tất cả trong tất cả có lẽ là dễ nhất để sử dụng một RIGHT JOIN
SELECT P.PersonName,
Pt.PetName,
Pa.AccessoryName
FROM Pets Pt
JOIN PetAccessories Pa
ON Pt.PetName = Pa.PetName
RIGHT JOIN Persons P
ON P.PersonName = Pt.PersonName;
Mặc dù nếu quyết tâm để tránh điều này tùy chọn khác sẽ được giới thiệu một bảng có nguồn gốc có thể được rời nối với
SELECT P.PersonName,
T.PetName,
T.AccessoryName
FROM Persons P
LEFT JOIN (SELECT Pt.PetName,
Pa.AccessoryName,
Pt.PersonName
FROM Pets Pt
JOIN PetAccessories Pa
ON Pt.PetName = Pa.PetName) T
ON T.PersonName = P.PersonName;
SQL Fiddles: MySQL, PostgreSQL, SQL Server
Related: http: // s tackoverflow.com/questions/436345/when-or-why-would-you-use-a-right-outer-join-instead-of-left – Thilo