人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

T1とT2というテーブルがあります。T1にはShopID,ShopName、Table2に同じくShopID,Moneyがあります。T1のShopID,ShopNameは重複があるのでdistinctで重複をなくします。Left Joinを使ってT1.ShopID,T1.ShopName,T2.ShopID,T2.Moneyを結合させてレコードセットを作りたいです。

select distinct T1.ShopID,T1.ShopName,T2.Shop from T1 left join T2 on T1.ShopID = T2.ShopID where T1.ShopID is not null
といった文をつくりました。レコードセットは作られたのですが、T2.Moneyの所が空欄になってしまいます。実際にデータは存在します。なぜこのような現象がおこるのでしょうか?また解決策は何があるでしょうか?

●質問者: akaired
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:ON SELECT T2 データ レコード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● memo77
●27ポイント

まずselectでT2.Moneyを書いていないので、そもそも列が表示されないと思いますが、どうなのでしょう。

目的のSQLは

SELECT T2SUM.ShopID,T1.ShopName,T2SUM.MoneySUM
FROM (
 SELECT T2.ShopID,Sum(T2.Money) AS MoneySUM
 FROM T2
 GROUP BY T2.ShopID
) AS T2SUM
INNER JOIN T1
ON T2SUM.ShopID = T1.ShopID

という感じではないかと予想します。

moneyが単価なのか金額なのかがわかりませんけど。


distinctを使うのはかなり最後の手段です。

まずはGROUP BYを覚えることをオススメします。


2 ● ふるるP
●27ポイント

Left Join で右側のテーブルのフィールドの値がNullというのは、結合条件で弾かれた場合が多いです。

from T1 left join T2 on T1.ShopID = T2.ShopID where T1.ShopID is not null

とかかれていますが、

T1.ShopID is not null

ではなくて、

T2.ShopID is not null

の間違いではないでしょうか。


3 ● Mook
●26ポイント

これまでの質問の経緯から判断すると、

T1 テーブル・・・ ShopID, ShopName
T2 テーブル・・・ ShopID, Money

があり、ShopID 毎に集計して店名を 連結して表示したいということだと思いますが、

そうであれば、下記のようにできるかと思います。

Option Compare Database
Sub SumSample()
 Dim DB As DAO.Database
 Dim RS As DAO.Recordset
 Dim SQL As String
 Set DB = CurrentDb
 SQL = "SELECT temp_table.shopid AS id, total, name " _
 & "FROM ( SELECT shopid, sum(money) AS total FROM T1 GROUP BY shopid ) AS temp_table " _
 & "LEFT JOIN T2 ON temp_table.shopid = T2.shopid"
 Set RS = DB.OpenRecordset(SQL)
 Do Until RS.EOF
 Debug.Print RS!id & "/" & RS!Name & "/" & RS!total
 RS.MoveNext
 Loop
 RS.Close: Set RS = Nothing
 DB.Close: Set DB = Nothing
End Sub

期待される仕様が異なるようであれば、コメントください。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ