partenaire
tablosum var. Bir partenaire bir veya daha fazla adrese sahip olabilir. Ve elbette bir adres birden fazla partiye “ait” olabilir. Yani 3 tablom var: partenaire
, partenaire_adresse
ve adresse
. Adresin tek bir kasabası var (ville
Fransızca) id_ville
numaralı yabancı bir anahtarım var addresse
.SQL birleştirme ve sol dış birleştirme: sonuçlar neden farklı?
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;
Bu bana bu sonuçlar verir: Geçen masada bir LEFT OUTER JOIN
yaparsak
+----------------------------+-------------+------+------+--------+
| 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 |
+----------------------------+-------------+------+------+--------+
(region
) sonuçları aynı değildir:
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;
değil aynı Sonuçlar. Bkz:
+---------------------+----------+------+------+----------------+
| 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 |
+---------------------+----------+------+------+----------------+
Ben ilk sorgu, id_region ve id_departement null değildir çünkü, değil gerektiğini düşünüyorum, bu yüzden böyle yaparsanız bir, sonuçlar aynı olmalıdır "JOIN" veya bir "SOL DIŞ JOIN" . Yoksa bir şey mi özlüyorum?
Her bir sorguya göre, her iki kayda göre, herhangi bir anlamlı karşılaştırma yapmak için bir sipariş ekleyin. –