###前提・実現したいこと
php+mysqlでウェブアプリを作っている中で、
mysql をDBのセレクト文について、はまってしまい。
質問させていただきました。
left outer join についてです。
下記のような時にA.s_id=100とAテーブルの5つを指定しているのですが、
結果が、
初心者の筆問で、うまく意図が伝わっているのかわかりませんが、レフトジョインなので、
左にならえということで、
whereでAテーブルのs_idが入った5個が抽出されると思っておりましたが結果が
共通ID(A_id)を持ったものすべてが抽出されており、困惑しております。
下記の事で、
結合して10個の結果全てに対してs_idが入って結合したものでwhereしているものと考えてよろしいでしょうか。
その時主となるテーブルAに該当するものが5個しかなくても、それよりも多く抽出しているのか不可解でご教授頂きたいです。
また、下記のような結果を取得したい場合どのように書くことができるのかご指導いただければ幸いです。
【取りたいデーター】
| A_id | 担当者 | B_id |
|---|---|---|
| 1 | aさん | 1 |
| 2 | bさん | 2 |
| 3 | cさん | 3 |
| 4 | dさん | 4 |
| 5 | eさん | 5 |
Aテーブルにある数のみ重複はさせたくない。
###発生している問題・エラーメッセージ
テーブル名A
|A_id|名前|年齢|s_id|
|:--|:--:|--:|
|1|Aさん|25|100|
|2|Bさん|22|100|
|3|Cさん|23|100|
|4|Dさん|22|100|
|5|Eさん|24|100|
|6|Fさん|24|200|
テーブル名B
###【訂正しました】B_idとA_idが逆に記載しておりました・・・
| B_id | 担当者 | A_id |
|---|---|---|
| 1 | aさん | 1 |
| 2 | bさん | 2 |
| 3 | cさん | 3 |
| 4 | dさん | 4 |
| 5 | eさん | 5 |
| 6 | fさん | 1 |
| 7 | gさん | 2 |
| 8 | hさん | 3 |
| 9 | iさん | 4 |
| 10 | jさん | 5 |
###該当のソースコード
使用したmql文
SELECT A.A_id,A.名前,B.B_id FROM A LEFT OUTER JOIN B on A.A_id = B.A_id where A.s_id = 100;
###試したこと
結果が、
| A_id | 名前 | B_id |
|---|---|---|
| 1 | Aさん | 1 |
| 2 | Bさん | 2 |
| 3 | Cさん | 3 |
| 4 | Dさん | 4 |
| 5 | Eさん | 5 |
| 1 | Aさん | 1 |
| 2 | Bさん | 2 |
| 3 | Cさん | 3 |
| 4 | Dさん | 4 |
| 5 | Eさん | 5 |
全部で10個がでてしまいます。
私的には、whereでAテーブルの5個を指定しているので、5個しか出ないと思っていたのですが・・・
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
環境は、
php 5.6
mysql 5.6
になります。
どうぞよろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/01 06:50