• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mySQLの内部結合について)

mySQLの内部結合について

このQ&Aのポイント
  • mySQLを使って、テーブル同士をINNER JOINして結果を取得して、さらに別の処理を行う方法について質問します。
  • 具体的なSQL文を示しながら、結合と絞り込みの処理を説明し、既存のテーブルのように結合後のデータを扱いたい場合についても説明します。
  • 質問文章の要点として、mySQLの内部結合によってテーブルを結合し、その結果に対してさらに絞り込みの処理を行いたい場合の方法と、結合後のデータの扱い方について質問しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

SELECT cmaster.comic_id,tags,title FROM mysql.comic_tag as ctag INNER JOIN mysql.comicmaster as cmaster ON ctag.comic_id = cmaster.comic_id SELECT cmaster.comic_id,tags,title FROM mysql.comic_tag as ctag WHERE tags = 'aa' 2つのSQL文を見比べてもらうとわかる(というか文法書に書いてあること)のですが、 Inner join テーブル1 on 条件1 ・・・from テーブル where 条件2 Inner join テーブル on 条件1は、from句のテーブルと書いた中に書きます。 だから、 ・・・from テーブル Inner join テーブル1 on 条件1 where 条件2 と書けばいいことが理解してもらえるかな。 ちなみに Inner join テーブル1 on 条件1 の条件1をandでつなぐこともできるので ON ctag.comic_id = cmaster.comic_id AND tags = 'aa' と書いても動くかも。 でもあとでみたときに分からなくなるので、お薦めしません!!! (あくまで onの後ろはテーブルを結合する条件だけにするべき)

lain_003
質問者

お礼

詳しく書いていただいて恐縮です。 おかげさまでソースも動くようになりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

文法上はWHEREの前のANDは不要です。

lain_003
質問者

お礼

そうだったんですね。お返事ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP+MySQL 内部結合(INNER_JOIN)がうまく行きません。

    以下の文で「client_master」テーブルと「jobmaster0717」テーブルを内部結合させようとしているのですが、うまく行きません。どこがおかしいのでしょうか? <?php  // データベースサーバへの接続・データベースの選択  $db = mysql_connect('localhost','test','password');  $db_name = 'test';  mysql_select_db($db_name,$db);  // 処理対象テーブル  $tbl_name1 = "client_master";  $tbl_name2 = "jobmaster0717";    // 内部結合(INNER JOIN句)  $str_sql1 = "SELECT * FROM {$tbl_name1}"       . " INNER JOIN {$tbl_name2}"       . " ON {$tbl_name1}.company_ID"       . "  = {$tbl_name2}.client_ID;";  $rs1 = mysql_query($str_sql1,$db);  print "\"{$str_sql1}\"<br>\n";  // 結果セットの表示  show_rs($rs1,$db);  print "<br>\n";  // 結果セット(結果ID)の開放  mysql_free_result($rs1);    // データベースサーバの切断  mysql_close($db); ?>

  • テーブル結合について

    SQL Serverで、メイン、サブ1、サブ2、サブ3、サブ4というテーブルがあり、以下のSQLを実行すると、メインにあるすべてのデータ(10列)が抽出されます。 SELECT * FROM メイン INNER JOIN サブ1 ON メイン.name1=サブ1.id INNER JOIN サブ2 ON メイン.name2=サブ2.id INNER JOIN サブ3 ON メイン.name3=サブ3.id しかし、上記のSQL文に追加して、 SELECT * FROM メイン INNER JOIN サブ1 ON メイン.name1=サブ1.id INNER JOIN サブ2 ON メイン.name2=サブ2.id INNER JOIN サブ3 ON メイン.name3=サブ3.id INNER JOIN サブ4 ON メイン.name4=サブ4.id とすると、メイン内の10列のうち、2列しか抽出されません。 サブ4を結合しても、一つ目のSQL文と同じ結果を抽出したかったのですが、どこがおかしいのでしょうか? SQL文がまずいのか、サブ4のテーブル内容のせいなのか、SQL Serverの設定がおかしいのか、さっぱり見当がつきません。 足りない情報がありましたら補足いたしますので、どうぞよろしくお願いします。

  • Mysqlの結合について質問させてください。

    MySQL5.0.37 を使用しています。 SQL文の作り方でどうしてもうまくいかないので質問させてください。 下記のような4つのテーブルがあります。 テーブル1:syukkingenba user|basyo 1 |東京 2 |東京 3 |東京 テーブル2:user user|name 1 |イチロウ 2 |ジロウ 3 |サブロウ テーブル3:genba basyo|date |genba_id 東京 |2009/1/10|123 syukkin id|user|date |status 1 |1 |2009/1/10|有効 2 |2 |2009/1/10|有効 3 |3 |2009/1/10|有効 4 |1 |2009/1/10|有効 現在のSQL文は SELECT syukkingenba.`user`, syukkingenba.`basyo`, user.`name`, syukkin.`id` FROM `syukkingenba` INNER JOIN `user` ON syukkingenba.`user` = user.`user` INNER JOIN `genba` ON genba.`basyo` = syukkingenba.`basyo` INNER JOIN `syukkin` ON syukkin.`date` = genba.`date` WHERE genba.`kaisai_id` = '123' AND user.`user` = syukkingenba.`user` AND syukkin.`status` = '有効' と記載しています。 すると結果は syukkingenba.`user`|syukkingenba.`basyo`|user.`name`|syukkin.`id` 1 |東京 |イチロウ |1 2 |東京 |ジロウ |2 3 |東京 |サブロウ |3 1 |東京 |イチロウ |4 となってしまいます。 syukkingenbaを親として、下記のような結果を抽出するにはどうすればよろしいでしょうか? syukkingenba.`user`に紐付くsyukkin.`id`は1でも4でも最初に検索された方でかまいません。 syukkingenba.`user`|syukkingenba.`basyo`|user.`name`|syukkin.`id` 1 |東京 |イチロウ |1 2 |東京 |ジロウ |2 3 |東京 |サブロウ |3 内容が分かりずらいようでしたらすいません。 どうかよろしくお願いいたします。

  • inner joinをすると数がおかしくなります

    SQLのinner joinについてお教え下さい。環境はWin 7 MYQL5です。 t1テーブルのデータ ID,在庫 001,22 t2テーブルのデータ ID,出庫 001,17 001,3 SELECT Sum(t1.stock) AS `在庫` FROM t1 where id = '001' 上記SQLの結果は22と表示されます。 SELECT Sum(t1.stock) AS `在庫` FROM t1 INNER JOIN t2 on t1.id = t2.id where id = '001' とやると、結果が44になってしまいます。 なぜそんな結果になってしまうのでしょうか? 結果はt1.stockは在庫22なので、22と表示するようにしたいです。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • Accessの内部結合

    こんにちは。 Accessでcateテーブルとgoodsテーブルがあります。 select * from goods inner join cate on goods.cateid = cate.id; クエリデザインで、テーブルとテーブルを結合して上記のようなSQLができました。 これは動作することを確認しました。 SQLビューで下記のようなSQLを書きました。 select * from goods inner join cate on left(goods.cateid,5) = cate.id; しかしながら、動きませんでした。 VBAを使わずに、Accessの標準のクエリデザインから上記のようなSQLを実行させることは可能でしょうか? クエリデザインでselect left(cateid,5) as cateid from goodsというTESTクエリをつくり、TESTクエリとcateテーブルとジョインさせれば解決しそうなことはわかるのですが・・・ 宜しくお願いします。

  • NOT INをNOT EXISTSで書き直したい

    こんにちは。SQLでNOT INが実行速度が遅いため、EXISTSで書き直したいのですが、思っている結果がでません。 SQLのどこが間違っているかお教え頂けませんでしょうか? ■ ・テーブル名:R_TABLE ・フィールド:id データ: id(ユニークではない) 001 002 003 003 003 007 008 009 ■ ・テーブル名:P_Master ・フィールド:id データ: id(ユニーク) 001 002 003 ■やりたい事 R_TABLEのデータを条件によって削除したい。 条件はP_MASTERに無いR_TABLEの行を削除したいです。 ■欲しい結果 R_TABLE 001 002 003 003 003 ■書いたSQL DELETE FROM R_TABLE WHERE R_TABLE.id NOT IN (SELECT R_TABLE.id FROM R_TABLE INNER JOIN P_MASTER ON R_TABLE.id = P_MASTER.id) これは正しい結果がでました。 書きなおしたSQL DELETE FROM R_TABLE WHERE R_TABLE.id WHERE NOT EXISTS (SELECT R_TABLE.id FROM R_TABLE INNER JOIN P_MASTER ON R_TABLE.id = P_MASTER.id) 結果はR_TABLEから何も消されていませんでした。 どこを修正すれば正しい結果が得られるでしょうか? 副問い合わせで、R_TABLEとP_MASTERのINNER JOINの結果が得られ、R_TABLEからINNER JOINに含まれないデータ削除しろという命令だと思っていたのですが違うみたいです。 どこを修正すればよろしいでしょうか? よろしくお願いします。

  • テーブルを結合するとき

    MySQLのSQL文です。 TblAのID、Nmがあり、TblBにID、Adrsがあるとします。 次の2つのSQL文の結果は同じになります。 そもそもこの2つの書き方には何か違う意味があるのでしょうか。 CREATE View TblC1 as SELECT TblA.ID, TblA.Nm, TblB.Adrs FROM TblA INNER JOIN TblB ON TblA.ID = TblB.ID; CREATE View TblC2 as SELECT TblA.ID, TblA.Nm, TblB.Adrs FROM TblA ,TblB where TblA.ID = TblB.ID; また、TblAにはありTblBには含まれないレコードを出すときは CREATE View TblC3 as SELECT TblA.ID, TblA.Nm, TblB.Adrs FROM TblA LEFT JOIN TblB ON TblA.ID = TblB.ID; 逆にTblBにありTblAには含まれないレコードを出すときは CREATE View TblC4 as SELECT TblA.ID, TblA.Nm, TblB.Adrs FROM TblA RIGHT JOIN TblB ON TblA.ID = TblB.ID; としています。 これをwhereを使った書き方ではできないのでしょうか。

    • ベストアンサー
    • MySQL
  • php mysql接続での書き方

    色々なサイトを拝見させて頂き勉強をしていると phpからmysqlで接続し呼び出すときに prepare(array(SELECT * FROM request WHERE id = ?,)); このような一文で呼び出すものと行数を分け prepare(implode(' ', array( 'SELECT *', 'FROM `request`', 'WHERE `id` = ?', このように書いているものとあります。 個人的には行数を分けていた方がわかりやすいので後者のほうで書いているのですが、これは作る人の気分でかき分けていいものなのか気になり質問させて頂きました。 また後者ではどういうタイミングで区切るのかわからないというのもあります。 SELECT * FROM users INNER JOIN category ON users.category = category.id INNER JOIN images ON users.category = images.id このように3つのテーブルを内部統合したくこの文を作りmysql上で叩くと3つ統合され表示されます。 しかし上記の文に当てはめphpから叩くとエラーがでます。 素直に1行で書けばよいのですが、分からないからというってスルーするのはあまり良くないかと重いご質問させて頂きました。 この3つのテーブルの場合、後者の書き方ではどのタイミングで区切るのでしょうか。

    • ベストアンサー
    • PHP
  • WHERE句で結合。INNER JOINとの違い

    MySQLで複数テーブルからデータ取得する際、 FROMの後に、テーブル名を2つ書いて、「WHERE」で繋げる書き方と、 「JOIN ★★ ON」で繋げる書き方では、何が違うのでしょうか? ・「INNER JOIN」と同じ意味でしょうか? ・書き方によっては、「LEFT OUTER JOIN」みたいにも書けるのでしょうか? ・普通は、どちらの書き方で書くとか、そういうお作法的な暗黙の了解はあるでしょうか? ・例えば「WHERE」だと3つ以上繋げられない(?)から、奨励されていない、とか…

    • ベストアンサー
    • MySQL
  • inner joinについて

    SQLのデータ抽出方法についてお教え下さい。 TABLE_2をdistinctで重複を無くして、TABLE_1とinner joinさせたいです。 select distinct TABLE_2.id と select TABLE_1.ID from TABLE_1 inner join distinct TABLE_2.ID といったようなことをやりたいです。 TABLE_1 ID 001 001 002 002 002 TABLE_2 ID 001 001 002 002 002 環境はMYSQL5.5になります。よろしくお願いいたします。

このQ&Aのポイント
  • パソコンのハードディスクの容量が少なすぎる場合、製品の交換はできないのか?
  • ハードディスクの増設は可能か?
  • 富士通FMVのハードディスク容量についての相談
回答を見る