join(テーブルの内部結合)の表示順序について
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 469
三つのテーブルを以下のように用意しました。
mysql> select * from tb;
+------+------+------+
| bang | uria | tuki |
+------+------+------+
| A103 | 101 | 4 |
| A102 | 54 | 5 |
| A104 | 181 | 4 |
| A101 | 184 | 4 |
| A103 | 17 | 5 |
| A101 | 300 | 5 |
| A102 | 205 | 6 |
| A104 | 93 | 5 |
| A103 | 12 | 6 |
| A107 | 87 | 6 |
+------+------+------+
10 rows in set (0.00 sec)
mysql> select * from tb3;
+------+--------------+
| bang | ken |
+------+--------------+
| A101 | 東京都 |
| A102 | 埼玉県 |
| A103 | 神奈川県 |
| A104 | 北海道 |
| A105 | 静岡県 |
+------+--------------+
5 rows in set (0.00 sec)
mysql> select * from tb1;
+------+--------+------+
| bang | nama | tosi |
+------+--------+------+
| A101 | 佐藤 | 40 |
| A102 | 高橋 | 28 |
| A103 | 中川 | 20 |
| A104 | 渡辺 | 23 |
| A105 | 西澤 | 35 |
+------+--------+------+
5 rows in set (0.00 sec)
bang(番号)をキーに結合したら、以下のような結果が出ました。
教科書に載ってた結果には、テーブルtbと同じbangの順番で、A103→A102→A104→A101→A103→A101のように出力されていたのに対し、以下の結果では、A101はA101でまとめて表示し、A102も二つまとめて表示する、というようになっています。
mysql> select
-> tb.bang,tb.uria,tb1.nama,tb3.ken
-> from tb
-> join tb1
-> using(bang)
-> join tb3 using(bang);
+------+------+--------+--------------+
| bang | uria | nama | ken |
+------+------+--------+--------------+
| A101 | 184 | 佐藤 | 東京都 |
| A101 | 300 | 佐藤 | 東京都 |
| A102 | 54 | 高橋 | 埼玉県 |
| A102 | 205 | 高橋 | 埼玉県 |
| A103 | 101 | 中川 | 神奈川県 |
| A103 | 17 | 中川 | 神奈川県 |
| A103 | 12 | 中川 | 神奈川県 |
| A104 | 181 | 渡辺 | 北海道 |
| A104 | 93 | 渡辺 | 北海道 |
+------+------+--------+--------------+
9 rows in set (0.00 sec)
この挙動には何か原因や意味があるのでしょうか。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
この挙動には何か原因や意味があるのでしょうか。
特にありません。SELECT
の順番は、ORDER BY
で指定しない限り不定、つまり「データベースエンジンの都合で勝手に決められる」ものです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
極端な話ランダムでソートされる可能性があるということ
- 元データ
create table sales(bang varchar(10),uria int,tuki int);
insert into sales values
('A103',101,4),
('A102', 54,5),
('A104',181,4),
('A101',184,4),
('A103', 17,5),
('A101',300,5),
('A102',205,6),
('A104', 93,5),
('A103', 12,6),
('A107', 87,6);
create table pref(bang varchar(10),ken varchar(10));
insert into pref values
('A101','東京都'),
('A102','埼玉県'),
('A103','神奈川県'),
('A104','北海道'),
('A105','静岡県');
create table user(bang varchar(10),name varchar(10),tosi int);
insert into user values
('A101','佐藤',40),
('A102','高橋',28),
('A103','中川',20),
('A104','渡辺',23),
('A105','西澤',35);
- 表示
select
t1.bang,t1.uria,t3.name,t2.ken
from sales as t1
join pref as t2 using(bang)
join user as t3 using(bang)
order by rand()
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/04/08 16:34