私はテーブルpartenaire
を持っています。 partenaireは1つまたは複数のアドレスを持つことができます。もちろん、1つのアドレスは複数のパートナーに「属し」てもよい。だから私は3つのテーブル:partenaire
、partenaire_adresse
とadresse
があります。住所には唯一の町(ville
フランス語)がありますので、addresse
の表には外国のキーid_ville
があります。SQL結合と左外部結合:なぜ結果は異なりますか?
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;
これは私にそれらの結果を与える:私は最後のテーブルの上にLEFT OUTER JOIN
(region
)を行う場合
+----------------------------+-------------+------+------+--------+
| 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 |
+----------------------------+-------------+------+------+--------+
は今、結果は同じではありません。
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;
なく、同じ結果。参照:
+---------------------+----------+------+------+----------------+
| 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 |
+---------------------+----------+------+------+----------------+
を、私は最初のクエリ、id_regionとid_departementにnullではないので、それはいけないと思うので、あなたがしなければ、結果は同じである必要があり、「結合」または「LEFT OUTER JOINを」 。または私は何かを逃していますか?
各クエリにorder byを追加して、正面のいくつかのレコードに基づいて意味のある比較を行います。 –