🦀
【Rust】SeaORMを使いSELECT時にテーブルを内部結合してデータを取得する
この記事を書くにあたって
Rustで自作アプリを作っている際、データベースの操作するために、ORMにSeaORMを使いました。
テーブルを内部結合する機会があったのですが、実装までに時間がかかり苦戦しました。今後似たような実装をするときのためにアクセスしやすい簡易的な手順書として残しておきたいと思ったのでここに書き留めておきます。
この記事で説明しないこと
- ORMのインストール、セットアップ方法
- use文の記載
- エンティティファイルの説明
- DBの接続方法
実演
データベースの状況確認
SELECT対象のテーブルの状況はこのようになります。(version = "0.12.2")
※ staffs(子)のdepartment_id は departments(親)のid 外部キーになります。

ソース
pub async fn select_inner_jouin() {
// INNER JOINクエリを実行(エンティティファイル内にRelatedが実装されている必要あり)
let staff_with_department:Vec<(staffs::Model, Option<departments::Model>)> = staffs::Entity::find()
.find_also_related(departments::Entity)
.all(db)
.await?;
// 結果を処理
for (staff, department) in staff_with_department {
if let Some(department) = department {
println!(
"Staff ID: {}, Name: {}, Department: {}",
staff.id, staff.staff_name.unwrap(), department.departments_name.unwrap()
);
}
}
Ok(())
}
//出力結果の例> Staff ID: 1, Name: 田中, Department: 営業部
Discussion