質問編集履歴

1

頂いた修正依頼をもとに「質問用のもっと簡易化した状態で、どういうJSON型のデータからどういう結合がしたいのか」を例示

2022/04/19 04:12

投稿

ryosuke24
ryosuke24

スコア2

test CHANGED
File without changes
test CHANGED
@@ -7,30 +7,35 @@
7
7
 
8
8
  ※case1に関し、中間テーブルを挟む事でデータ量が多くなるのかなと思っています。case2に関し、json型で格納することを推奨しない旨の記事をいくつか見受けられました。
9
9
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-19/9506dc9e-9a43-48c4-90f4-a2a6761dd17c.png)
10
+
10
11
  ## 質問2
11
12
  case1を実装する際に、json配列を外部キーにしてjoinする方法を生sqlで記述する方法で躓いています。
12
- 補足
13
- 写真のsitter_profileテーブルとavailable_pet_type_masterをjoinしたい
14
- ![![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-19/f5a62f4d-2cfc-4f0b-882b-eb1b1526345a.png)](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-19/4603f739-b980-4dcc-88d6-bbaf7ee2190b.png)
13
+ やりたいこと
14
+ userテーブルitem_id(json_array)を外部キーとして、itemテーブルとjoinしたい
15
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-19/77ad5730-2520-41da-a55f-666a57e37b1a.png)
15
16
 
16
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-19/6db932fa-9de0-4dd1-9fa8-06b90c44488d.png)
17
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-19/be529faa-dfe1-41a6-9fcb-cf4895ecf315.png)
18
+ 【上記のjoinをしたい理由】
19
+ 最終的にやりたい事は、例えば「user_id=1のユーザーが持っているitem_nameの一覧を表示させる」といった事なので、下の画像のようなテーブルを構成する必要があると考えている為です。
20
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-04-19/cf819035-abfc-4377-acdc-92266ae0eb70.png)
17
21
 
18
22
  ### 発生している問題・エラーメッセージ
19
23
 
20
24
  ```
21
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN sitting_place_master on JSON_UNQUOTE(JSON_EXTRACT(si.sitting_place_id,' at line 10
25
+ You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''$'' at line 6
22
26
  ```
23
27
 
24
28
  ### 該当のソースコード
25
29
 
26
30
  ```mysql
27
31
  select
28
- si.id as sitter_id,
29
- si.user_id as user_id,
32
+ user.id as user_id,
30
- available_pet_type_master.name as available_pet_type
33
+ item.name as item_name
31
34
  from
32
- sitter_profile as si
35
+ user
33
- LEFT JOIN sitting_place_master on JSON_UNQUOTE(JSON_EXTRACT(si.sitting_place_id, '$')) = sitting_place_master.id '$';
36
+ LEFT JOIN item on JSON_UNQUOTE(JSON_EXTRACT(user.item_id, '$')) = item.id '$';
37
+ -- ↓非jsonの場合のjoin
38
+ -- left join item on user.item_id = item.id,
34
39
  ```
35
40
 
36
41
  ### 試したこと