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

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

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

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

Q&A

解決済

2回答

1322閲覧

join(テーブルの内部結合)の表示順序について

salah0615

総合スコア49

MySQL

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

0グッド

0クリップ

投稿2019/04/08 07:25

三つのテーブルを以下のように用意しました。

mysql

1mysql> select * from tb; 2+------+------+------+ 3| bang | uria | tuki | 4+------+------+------+ 5| A103 | 101 | 4 | 6| A102 | 54 | 5 | 7| A104 | 181 | 4 | 8| A101 | 184 | 4 | 9| A103 | 17 | 5 | 10| A101 | 300 | 5 | 11| A102 | 205 | 6 | 12| A104 | 93 | 5 | 13| A103 | 12 | 6 | 14| A107 | 87 | 6 | 15+------+------+------+ 1610 rows in set (0.00 sec)

mysql

1mysql> select * from tb3; 2+------+--------------+ 3| bang | ken | 4+------+--------------+ 5| A101 | 東京都 | 6| A102 | 埼玉県 | 7| A103 | 神奈川県 | 8| A104 | 北海道 | 9| A105 | 静岡県 | 10+------+--------------+ 115 rows in set (0.00 sec)

mysql

1mysql> select * from tb1; 2+------+--------+------+ 3| bang | nama | tosi | 4+------+--------+------+ 5| A101 | 佐藤 | 40 | 6| A102 | 高橋 | 28 | 7| A103 | 中川 | 20 | 8| A104 | 渡辺 | 23 | 9| A105 | 西澤 | 35 | 10+------+--------+------+ 115 rows in set (0.00 sec)

bang(番号)をキーに結合したら、以下のような結果が出ました。
教科書に載ってた結果には、テーブルtbと同じbangの順番で、A103→A102→A104→A101→A103→A101のように出力されていたのに対し、以下の結果では、A101はA101でまとめて表示し、A102も二つまとめて表示する、というようになっています。

mysql

1 2mysql> select 3 -> tb.bang,tb.uria,tb1.nama,tb3.ken 4 -> from tb 5 -> join tb1 6 -> using(bang) 7 -> join tb3 using(bang); 8+------+------+--------+--------------+ 9| bang | uria | nama | ken | 10+------+------+--------+--------------+ 11| A101 | 184 | 佐藤 | 東京都 | 12| A101 | 300 | 佐藤 | 東京都 | 13| A102 | 54 | 高橋 | 埼玉県 | 14| A102 | 205 | 高橋 | 埼玉県 | 15| A103 | 101 | 中川 | 神奈川県 | 16| A103 | 17 | 中川 | 神奈川県 | 17| A103 | 12 | 中川 | 神奈川県 | 18| A104 | 181 | 渡辺 | 北海道 | 19| A104 | 93 | 渡辺 | 北海道 | 20+------+------+--------+--------------+ 219 rows in set (0.00 sec) 22

この挙動には何か原因や意味があるのでしょうか。

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

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

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

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

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

guest

回答2

0

極端な話ランダムでソートされる可能性があるということ

  • 元データ

SQL

1create table sales(bang varchar(10),uria int,tuki int); 2insert into sales values 3('A103',101,4), 4('A102', 54,5), 5('A104',181,4), 6('A101',184,4), 7('A103', 17,5), 8('A101',300,5), 9('A102',205,6), 10('A104', 93,5), 11('A103', 12,6), 12('A107', 87,6); 13 14create table pref(bang varchar(10),ken varchar(10)); 15insert into pref values 16('A101','東京都'), 17('A102','埼玉県'), 18('A103','神奈川県'), 19('A104','北海道'), 20('A105','静岡県'); 21 22create table user(bang varchar(10),name varchar(10),tosi int); 23insert into user values 24('A101','佐藤',40), 25('A102','高橋',28), 26('A103','中川',20), 27('A104','渡辺',23), 28('A105','西澤',35);
  • 表示

SQL

1select 2t1.bang,t1.uria,t3.name,t2.ken 3from sales as t1 4join pref as t2 using(bang) 5join user as t3 using(bang) 6order by rand()

投稿2019/04/08 07:48

yambejp

総合スコア114769

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

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

salah0615

2019/04/08 11:26

なるほど、ありがとうございます。参考にさせていただきます!
guest

0

ベストアンサー

この挙動には何か原因や意味があるのでしょうか。

特にありません。SELECTの順番は、ORDER BYで指定しない限り不定、つまり「データベースエンジンの都合で勝手に決められる」ものです。

投稿2019/04/08 07:26

maisumakun

総合スコア145183

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

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

salah0615

2019/04/08 07:34

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問