LoginSignup
quint555
@quint555

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

MySQLの更新に関して質問がございます。

解決したいこと

下記表1のid=100のAliceのplanへ表2のAliceに紐づくplan(1と2)を入れたいです。

表1
+-----+-------+-------+
| id | name | plan |
+-----+-------+-------+
| 100 | Alice | null |
| 101 | Mike | null |
| 102 | Bob | null |
+-----+-------+-------+

表2
+-----+-------+-------+
| plan | name | price |
+-----+-------+-------+
| 1 | Alice | 500 |
| 2 | Alice | 300 |
| 3 | Bob | 1000 |
+-----+-------+-------+

例)
解決方法を教えて下さい。

発生している問題・エラー

なし

例)


または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

ソースコードを入力

例)

自分で試したこと

ここに問題・エラーに対して試したことを記載してください

JOINで結合してみたのですが、plan1しか代入されなかったです。

その後、表2のplanのデータ型をintからvarcharに変換したのですが、解決方法がみつかっておりません。

0

2Answer

planのデータ型をintからvarcharに変換した

従来のMRDBであれば不可能です。正規化のルールやRDBの本質に反します。

但し、json_object型をplanにできればできる気がします。

基本はupdateですが、selectサブクエリーで in any そこに、jsonをぶっ込む

具体的なコードは暇ならMariaDBで試そうかな?

誰かトライしませんか?

そもそも、mangoDB,casaandoraを選択しては?

1Like

まず、データやその関連についてわからない部分が多いので回答が難しいところがあります。

その上での回答になりますが、ひとつのカラムにはひとつのデータしか入れることできません。
その代わりに、ひとつのデータに複数の意味を持たせるような形で、「100,200」のように区切り文字を使用したり、jsonデータという形で入れることはあります。
しかし、このようにひとつのデータに複数の意味を持たせることは、データ整合性において良い選択ではありません。このデメリット受け入れて手っ取り早くやりたい場合などに、そのような選択をすることがあります。

もし、このデータがユーザー(表1)と契約プラン(表2)のようなデータで、ユーザーは複数の契約をできるというルールがあった場合、中間テーブルを置いて多対多の構造になることが多いです。

いずれにしてもMySQLのこうした問題は、データベースの正規化についての知識が必要になります。

1Like

Your answer might help someone💌