元のタイトル
表1: Person
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+-------------+---------+
PersonId
上記の表の主キーです
表2:住所
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+-------------+---------+
AddressId
上記の表の主キーです
条件を満たすSQLクエリを記述します。個人が住所情報を持っているかどうかに関係なく、上記の2つの表に基づいて次の個人情報を提供する必要があります。
FirstName、LastName、City、State
出典:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/combine-two-tables
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
解決
方法:使用 outer join
personId
TablePerson
外部キーのAddressテーブルは、これら2つのテーブルを接続して、個人の住所情報を取得できるためです。
すべての人が住所情報を持っているわけではない可能性を考慮してouter join
、デフォルトの代わりにを使用する必要がありますinner join
。
select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId;
著者:LeetCode
リンク:https://leetcode-cn.com/problems/combine-two-tables/solution/zu-he-liang-ge-biao-by-leetcode/
出典:滞在ボタン(LeetCode)の
著作権は著者。商用の再版については、著者に連絡して許可を求め、非商用の再版については、出典を示してください。
反射
この質問の理由は、私が長い間SQLを記述しておらず、構文、特にOuterJoinとInnerJoinがほとんど忘れられているためです。
インタビューに変更すると、OuterJoinとInnerJoinの違いを直接尋ねられる場合があります。
ナレッジポイントのレビューは次のとおりです
。https://blog.csdn.net/chanmufeng/article/details/78234654
外部結合は、別のテーブルで一致する行を見つけることができる必要があります。そうでない場合は、nullです。
住所情報があるかどうかに関係なく、住所情報を空にすることができるように、市と州の情報、つまり住所情報を提供する必要があります。
件名がpersonであるため、左側のテーブルはPerson、右側のテーブルはAddressです。左結合を使用して、座標のすべての行をクエリできます。左側のテーブルに一致する右側のテーブルの行が通常どおり表示されます。一致するものがない場合、つまり、対応するものがないため、nullとして表示されます。これで対象の要件は完了です。
左結合と右結合を忘れてしまったので、お米なしで料理が上手な女性にはなかなか出来ません。