MENU

SQL メモ

基本的な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};