内側と外側の結合の相互作用を理解するSQL
複雑なSQLクエリは、異なる結合タイプを組み合わせて、複数の結合操作を頻繁に使用します。 重要な考慮事項は、外側結合の特性であるnull値を含めることが、その後、内側の結合が適用されると影響を受けることです。
内側結合が外部結合結果にどのように影響するか
内側の結合は、その性質上、の両方で結合条件が満たされる行を返す行のみを返します。 内側の結合が外側の結合に続いて、内側の結合の状態がnull(外側の結合のため)の可能性のある列に依存している場合、それらの列がnullである行を効果的に除去します。これにより、外側の結合が最初に提供されたヌル値が含まれています。
実例シナリオを調べてみましょう:
select * 人から person.address_id = address.idの左結合アドレス 内側の参加ememail_id = email.id;
SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN email ON person.email_id = email.id;
left join は、人
テーブルからのすべての行が含まれていることを保証します。 ただし、内側の結合
と email
との結合は、
email_id が
人と
email の両方に存在する行のみに制限されます。 一致する
アドレスを持っていた person
がありますが、null email_id
が除外されます。
問題のあるシナリオとそのソリューション
select * 人から person.address_id = address.idの左結合アドレス address.city_id = city.id;
の内側の参加都市
ここで、SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN city ON address.city_id = city.id;
は address.city_id がnullであると仮定します。 一部のアドレスに
city_id がない場合、それらの行(および関連する
人列)が省略され、最初の
left join 。
。
正しいアプローチは、
left join を使用することです。
に参加します。
これは、 Join
の包括性を保持します。 これにより、すべての
レコードが含まれていることが保証されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3