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

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

ただいまの
回答率

88.79%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 416

salah0615

score 45

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

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/08 16:34

    ありがとうございます。

    キャンセル

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()

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/08 20:26

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

    キャンセル

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

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る