Tôi có một bảng partenaire
. Một partenaire có thể có một hoặc nhiều địa chỉ. Và tất nhiên một địa chỉ có thể "thuộc về" cho nhiều hơn một partenaire. Vì vậy, tôi có 3 bảng: partenaire
, partenaire_adresse
và adresse
. Địa chỉ chỉ có một thị trấn (ville
bằng tiếng Pháp) vì vậy tôi có khóa ngoài id_ville
trong bảng addresse
.Tham gia SQL và tham gia bên ngoài bên trái: tại sao các kết quả khác nhau?
SELECT
p.nom,
v.nom, v.id_region as id_r, v.id_departement as id_p,
r.description as region
FROM partenaire p
JOIN partenaire_adresse pa
ON pa.id_partenaire=p.id
JOIN adresse a
ON a.id=pa.id_adresse
JOIN ville v
ON v.id=a.id_ville
JOIN region r
ON v.id_region=r.id
LIMIT 4;
này mang lại cho tôi những kết quả:
+----------------------------+-------------+------+------+--------+
| nom | nom | id_r | id_p | region |
+----------------------------+-------------+------+------+--------+
| Ferme Auberge Christlesgut | Breitenbach | 1 | 2 | Alsace |
| Alice Pizza | Strasbourg | 1 | 1 | Alsace |
| Au Vieux Cellier | Strasbourg | 1 | 1 | Alsace |
| Auberge du 7Eme Art | Strasbourg | 1 | 1 | Alsace |
+----------------------------+-------------+------+------+--------+
Bây giờ nếu tôi làm một LEFT OUTER JOIN
trên bàn cuối cùng (region
) kết quả là không giống nhau:
SELECT
p.nom,
v.nom, v.id_region as id_r, v.id_departement as id_p,
r.description as region
FROM partenaire p
JOIN partenaire_adresse pa
ON pa.id_partenaire=p.id
JOIN adresse a
ON a.id=pa.id_adresse
JOIN ville v
ON v.id=a.id_ville
LEFT OUTER JOIN region r
ON v.id_region=r.id
LIMIT 4;
Không giống các kết quả. Xem:
+---------------------+----------+------+------+----------------+
| nom | nom | id_r | id_p | region |
+---------------------+----------+------+------+----------------+
| 'Le 144' Petrossian | Paris 18 | 12 | 43 | Île-de-France |
| 'Le 144' Petrossian | Paris 08 | 12 | 43 | Île-de-France |
| 'O'Quai' | Vouvray | 7 | 26 | Centre |
| 'O'Quai' | Tours | 7 | 26 | Centre |
+---------------------+----------+------+------+----------------+
tôi nghĩ rằng nó không nên, bởi vì trong truy vấn đầu tiên, id_region và id_departement không null, vì vậy nếu bạn làm một "THAM GIA" hay một "LEFT OUTER JOIN", kết quả sẽ là như nhau . Hay tôi đang thiếu một cái gì đó?
Thêm đơn đặt hàng cho từng truy vấn để thực hiện bất kỳ loại so sánh có ý nghĩa nào dựa trên một vài bản ghi ở mặt trước. –