2点自己学習のMySQLに関し質問があります。
質問1
userが複数のitemを所有している状態を表したい時、写真のcase1とcase2どちらが推奨されるテーブル構成でしょうか?
【補足】
Case1の場合、usersテーブルにて 複数のitem_idをjson形式で格納しようと思っています。Case2の場合、user_itemテーブルを中間テーブルとし、他対多の関係を築いています。
※case1に関し、中間テーブルを挟む事でデータ量が多くなるのかなと思っています。case2に関し、json型で格納することを推奨しない旨の記事をいくつか見受けられました。
質問2
case1を実装する際に、json配列を外部キーにしてjoinする方法を生sqlで記述する方法で躓いています。
【やりたいこと】
userテーブルのitem_id(json_array)を外部キーとして、itemテーブルとjoinしたい。
【上記のjoinをしたい理由】
最終的にやりたい事は、例えば「user_id=1のユーザーが持っているitem_nameの一覧を表示させる」といった事なので、下の画像のようなテーブルを構成する必要があると考えている為です。
発生している問題・エラーメッセージ
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
該当のソースコード
mysql
1select 2 user.id as user_id, 3 item.name as item_name 4from 5 user 6 LEFT JOIN item on JSON_UNQUOTE(JSON_EXTRACT(user.item_id, '$')) = item.id '$'; 7 -- ↓非jsonの場合のjoin 8 -- left join item on user.item_id = item.id,
試したこと
jsonを扱う関数(json_contains等)を使用して外部キーに設定してみた
【参考】
https://stackoverflow.com/questions/39818296/using-mysql-json-field-to-join-on-a-table
補足情報(FW/ツールのバージョンなど)
mysql8.0
回答2件
あなたの回答
tips
プレビュー