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の所が空欄になってしまいます。実際にデータは存在します。なぜこのような現象がおこるのでしょうか?また解決策は何があるでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2009/04/17 07:48:18
  • 終了:2009/04/24 07:50:02

回答(3件)

id:memo77 No.1

memo77回答回数238ベストアンサー獲得回数202009/04/17 09:14:38

ポイント27pt

まず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を覚えることをオススメします。

id:frkw2004 No.2

ふるるP回答回数192ベストアンサー獲得回数212009/04/17 12:05:19

ポイント27pt

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

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

id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912009/04/17 17:23:54

ポイント26pt

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

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません