- ベストアンサー
mySQLの内部結合について
- mySQLを使って、テーブル同士をINNER JOINして結果を取得して、さらに別の処理を行う方法について質問します。
- 具体的なSQL文を示しながら、結合と絞り込みの処理を説明し、既存のテーブルのように結合後のデータを扱いたい場合についても説明します。
- 質問文章の要点として、mySQLの内部結合によってテーブルを結合し、その結果に対してさらに絞り込みの処理を行いたい場合の方法と、結合後のデータの扱い方について質問しています。
- みんなの回答 (2)
- 専門家の回答
その他の回答 (1)
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
関連する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); ?>
- 締切済み
- MySQL
- テーブル結合について
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 内容が分かりずらいようでしたらすいません。 どうかよろしくお願いいたします。
- 締切済み
- MySQL
- 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テーブルとジョインさせれば解決しそうなことはわかるのですが・・・ 宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- 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
- テーブルを結合するとき
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になります。よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
お礼
詳しく書いていただいて恐縮です。 おかげさまでソースも動くようになりました。ありがとうございます。