基本的なDB構造のSQLまとめ
1対多の場合
user.todosみたいにデータを取りたい場合
- schema
model User { name: string; } model Todo { title: string; user_id: int; }
ChatGptに質問したら、 下記のSQLを教えてくれたでも FROMに Todoを持ってくるのは理由がわからないな
SELECT t.*, u.name AS user_name FROM Todo t LEFT JOIN User u ON t.user_id = u.id;
調べてたらやはり起点が異なると意味合いが違うようで、 AはTodoが紐づいていないuserを全て持ってくる BはTodoい紐づいたUserしか持ってこない
### A SELECT t.*, u.name AS user_name FROM User u LEFT JOIN Todo t ON t.user_id = u.id; ### B SELECT t.*, u.name AS user_name FROM Todo t LEFT JOIN User u ON t.user_id = u.id;
多対多の場合
Order Item OrderItemみたいな場合は下記
流れ Orderのテーブルを持ってくる OederItemをJOINする OrderItemとItemをJOINする where で検索するらしい
### 期待 order.items => item[] がほしい ### SQL SELECT i.* FROM "Order" o LEFT JOIN "OrderItem" oi ON o.id = oi.order_id LEFT JOIN "Item" i ON oi.item_id = i.id WHERE o.id = {特定の注文ID};