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

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

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

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

Q&A

解決済

2回答

6550閲覧

MySQLのJOIN,ON,WHEREを同時に使う場合

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

0グッド

0クリップ

投稿2016/03/16 12:26

MySQL

1select * from tb1 join tb2 on id1=id2 where ...

このような感じでjoin,onを使ってテーブルを連結させたのですが、このあとwhereで条件を指定した場合、どちらのテーブルを参照するのでしょうか

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

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

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

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

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

guest

回答2

0

(すでにmaisumakunさんの正しいご回答にベストアンサーをつけていらしていますが、横から並行して補足させていただきます)

select * from tb1 join tb2 on id1=id2 where ...

select * from tb1 join tb2 on id1=id2

まで (where 句の前まで) の結果セットに対して where 句は働きます。

すなわち tbl1 と tbl2 が結合した結果のデータに対して、です。

ちなみに group by、 having、 order by も、まさしくSQL文で書かれる位置順に論理的な処理が行われます。

SQL

1SELECT TBL1.SHOPID, TBL1.NAME, COUNT(*) 2FROM TBL1 3INNER JOIN TBL2 ON TBL2.ID = TBL1.ID 4WHERE TBL1.DEPTID IN (1021,1025) AND TBL2.HIREDATE IS NOT NULL 5GROUP BY TBL1.SHOPID, TBL1.NAME 6HAVING COUNT(*) > 0 7ORDER BY TBL1.SHOPID

上記例では
0. TBL1が取り出される。
0. 1.の結果へTBL2が互いのID列の一致で結合される。
0. 2.の結果へWHERE句で指定された条件に合った行だけに絞られる。
0. 3.の結果へTBL1.SHOPIDでグループ化される。
0. 4.の結果へHAVING句で指定された条件に合った行だけに絞られる。
0. 5.の結果へTBL1.SHOPIDの昇順で並び替えられる。

の順で論理的に処理されます。つまり、それぞれの句は、直前の結果が対象です。

物理的(内部的)には、上記の論理的な処理を満たすことを前提にしながら、より速く結果をだせるよう「最適化」された順番で、ディスクアクセスや計算処理などが行われます。

投稿2017/02/17 02:09

編集2017/02/17 02:10
hsk

総合スコア728

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

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

0

ベストアンサー

JOINしたテーブルに条件をかける場合、table_name.columnのようにテーブル名を明示して条件を書くのが正しいやり方です。

たまたま片方のテーブルにしかなければ列名だけでも動くかもしれませんが、両方のテーブルにある列をテーブル名無しで指定するとエラーになります。

投稿2016/03/16 12:47

maisumakun

総合スコア145201

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問