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と表示するようにしたいです。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
#1の方の回答のようにグループ化
しなければ2レコード出力されます。
22×2だから44は当然の帰結です。
おそらくやりたいことは以下のこと
でしょう。
SELECT A.z AS `在庫`,B.*
FROM (SELECT SUM(stock) AS z
FROM t1 WHERE id='001'
GROUP BY id) A
INNER JOIN t2 B ON A.id=B.id
ご回答ありがとうございます!教えて頂きました通り、from句でサブクエリを書いたら見事にやりたいことが実現しました。ありがとうございました!
No.2
- 回答日時:
リレーションの仕組みの基本が理解できていないようです
よくよく参考書を読まれた方がよろしいかと
今回のケースであればこんな処理でしょうか?
//準備
create table t1(ID int(3) unsigned zerofill,在庫 INT);
insert into t1 values(1,22),(1,30),(1,40),(2,50);
create table t2(ID int(3) unsigned zerofill,出庫 INT);
insert into t2 values(1,17),(1,3);
//ID=001に対して 在庫と出庫の合計をみる
SELECT sum(在庫) as 在庫計,出庫計 FROM t1
left join (select ID,sum(出庫) as 出庫計 from t2 group by ID) as sub
on t1.ID = sub.ID
where t1.ID = '001'
//IDごとにとりまとめ
SELECT t1.ID,sum(在庫) as 在庫計,出庫計 FROM t1
left join (select ID,sum(出庫) as 出庫計 from t2 group by ID) as sub
on t1.ID = sub.ID
group by t1.ID
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
SQL Left Join で重複を排除するには
SQL Server
-
GROUP BYを行った後に結合したい。
Oracle
-
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
-
4
select句副問い合わせ 値の個数が多すぎます
Oracle
-
5
結合したテーブルをSUMしたい
MySQL
-
6
SQLで部分的にGROUP BYしたいとき
Oracle
-
7
GROUP BYでエラーが発生
SQL Server
-
8
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
9
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
10
SELECTで1件のみ取得するには?
Oracle
-
11
SELECT 文 GROUP での1件目を取得
SQL Server
-
12
GROUP BYを使ったSELECT文の総件数を求める方法
SQL Server
-
13
データベース関係で、データの洗い替えとはどのような事を行うことでしょう
IT・エンジニアリング
-
14
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
15
小数点を含む数値かどうか判断の判断方法
Visual Basic(VBA)
-
16
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
17
他のデータベースとのテーブル結合
SQL Server
-
18
group byで指定したカラム以外のカラムの値を取得したい
PostgreSQL
-
19
count関数の値をwhere句で使用する方法について
MySQL
-
20
SQL文で素早くNULLを除外する方法
SQL Server
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
上位3位を求めるSQL文は?
-
副問合せの書き方について
-
Access パラメータクエリをcsv...
-
VIEWの元のテーブルのindexって...
-
ある時間以内の利用者の抽出に...
-
insertを高速化させたい
-
SQL Left Join で重複を排除す...
-
ある条件の最大値+1を初番する...
-
1テーブル&複数レコードの更新...
-
エクセルの関数について教えて...
-
全角文字を含む行を検索
-
同一のユーザー、同一商品のと...
-
テーブル作成です。どこかのス...
-
ストアドのエラーについて
-
クエリ表示と、ADOで抽出したレ...
-
[MySQL] 3つのテーブルの結合で...
-
入力値と外部キーをINSERTするには
-
親と子供が複数のSQL取得方法
-
select文のwhere句に配列を入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
PL/SQLの変数について
-
マイクラPC版のコマンドで効率...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
sqlで、600行あるテーブルを100...
-
Access パラメータクエリをcsv...
-
Unionした最後にGROUP BYを追加...
-
inner joinをすると数がおかし...
-
複数テーブルのGROUP BY の使い...
-
ある条件の最大値+1を初番する...
-
MySQLのint型で001と表示する方...
-
クエリ表示と、ADOで抽出したレ...
-
[MySQL] UNIQUE制約の値を更新...
-
テーブル名を省略して「h.id」...
おすすめ情報