質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

1560閲覧

mySQLで配列の外部参照は可能でしょうか?

shirai

総合スコア1290

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2019/05/15 09:15

実現したいこと

どうにもググってもイメージが掴めなかったので。
初歩的な質問ですみません。

以下のようなイメージなのですが、
そもそも実装が可能かどうかと、
その場合の「人」テーブルをcreateする
sql文を教えていただけないでしょうか。

「フルーツ」

fruit_idfruit_name
1apple
2lemon
3orange

「人」

human_namehuman_having_fruit
taro1,2
hanako
takashi1,3
yoko3
yoshie1,2,3

・いくつずつ持っているか
・どの順番で持っているか
などは実装できなくても大丈夫です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/05/15 09:21

「外部参照」ということは、「human_having_fruitに'4'とか'2,7'を入れようとしたらエラーになって失敗する」という動作が必要、ということでしょうか。
shirai

2019/05/15 09:24

一応無くても仕様通りには動かせます。その可否によって実装可否は変わって来るのでしょうか。
maisumakun

2019/05/15 09:25

そうですね、何のチェックもいらないなら「単なるカンマ区切りの文字列で入れる」という選択肢も存在します。
shirai

2019/05/15 09:33

なるほど、確かにそうですね。ちなみにですがチェックがいる場合はどうすればいいでしょうか。
maisumakun

2019/05/15 09:35

回答しましたが、「そもそもこのような形のテーブルを立てるのが適当でない」と考えます。
guest

回答2

0

ベストアンサー

そもそも実装が可能かどうかと、

可能ですがおすすめはできません。「human_having_fruitは入れて出せればそれでOK、ここを対象に検索などは行わない」というのでなければリレーションを正規化したほうがいいでしょう。

human_namefruit_id
taro1
taro2
takashi1
takashi3
yoko3
yoshie1
yoshie2
yoshie3

投稿2019/05/15 09:30

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/05/15 09:34

正規化した形であれば、fruit_idに外部キーを張る、human_nameとfruit_idの組み合わせでUNIQUEインデックスをかけるなど、データベースレベルでの制約をガンガンかけられます。
shirai

2019/05/15 09:37

これが一番しっくり来ました。ありがとうございました。
guest

0

SQL

1create table human(hid int primary key,hname varchar(20)); 2insert into human values 3(101,'taro'), 4(102,'hanako'), 5(103,'takashi'), 6(104,'yoko'), 7(105,'yoshie'); 8 9create table human_fruit(hrid int primary key auto_increment,hid int,fid int); 10insert into human_fruit(hid,fid) values 11(101,1), 12(101,2), 13(103,1), 14(103,3), 15(104,3), 16(105,1), 17(105,2), 18(105,3); 19 20select * from human as t1 left join 21(select hid,group_concat(fid) as human_having_fruit from human_fruit 22group by hid) as t2 on t1.hid=t2.hid 23order by t1.hid

投稿2019/05/15 09:39

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/05/15 09:40

hanakoがnullを拾うためにはhuman管理用のテーブルと human-furitをリレーションする中間テーブルは 分けないといけません
shirai

2019/05/15 10:17

なるほど結合を使えば完璧なテーブルができるのですね。なかなか高難易度ですね。。。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問