
こんばんは
次のような2つのテーブルを参照して条件を指定するUPDATE文はどのように書けばよいのでしょうか?
Parentsテーブル
ID, Name, HasChild, AGE
1, Tanaka, True, 20
2, Yamamoto, False, 25
3, Suzuki, True, 30
4, Kobayashi, True, 20
5, Sato, True, 25
Children
ID, Name, ParentID, Male, Flag
1, Taro, 1, True, 0
2, Hanako, 1, False, 0
3, Ichiro, 3, True, 0
4, Jiro, 4, True, 0
5, Subroh, 5, True, 0
やりたいこと:20歳の親を持つ男の子のみにフラグを付ける
Parentテーブルで、親が子持ち(HasChild = True)で、年齢が20歳の人だけを対象に
Childrenテーブルでその親の子(Parents.ID = Children.ParentID)が男の子(Male = True)だった場合、
Flag を 0 から 1 に変更する
実行結果
Children
ID, Name, ParentID, Male, Flag
1, Taro, 1, True, 1
2, Hanako, 1, False, 0
3, Ichiro, 3, True, 0
4, Jiro, 4, True, 1
5, Subroh, 5, True, 0
結果は、Tanaka TaroくんとKobayashi Jiroくんのフラグが1になります。
複数テーブルのSELECTについては勉強してきましたが、こういうパターンは初めてでわかりません。エクセルVBAから.mdbファイルを扱う時に使います。Microsoft.Jet.OLEDB.4.0のADODB.Connectionを使っています。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
ExcelからAccessのテーブルを更新するということならば
以下のような感じですか。Accessで更新クエリを作ってみれば
わかりますが。
Sub test()
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim strSQL As String
Dim strPath As String
strSQL = "UPDATE Childrenテーブル INNER JOIN Parentsテーブル " & _
"ON Childrenテーブル.ParentID = Parentsテーブル.ID SET Childrenテーブル.Flag = 1 " & _
"WHERE ([Parentsテーブル]![HasChild])=True AND ([Parentsテーブル]![AGE])=20 AND ([Childrenテーブル]![Male])=True"
strPath = ThisWorkbook.Path & "\sample.mdb"
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath
Set cmd.ActiveConnection = cn
With cmd
.CommandText = strSQL
.CommandType = adCmdText
.Prepared = True
End With
cmd.Execute
Set cmd = Nothing
cn.Close: Set cn = Nothing
End Sub
なお、SQL文の中身は
UPDATE Childrenテーブル INNER JOIN Parentsテーブル ON Childrenテーブル.ParentID = Parentsテーブル.ID SET Childrenテーブル.Flag = 1
WHERE ([Parentsテーブル]![HasChild])=True AND ([Parentsテーブル]![AGE])=20 AND ([Childrenテーブル]![Male])=True;
ですので、コード表が乱れていたら訂正してください。
夜分にありがとうございます。
さらにVB部分のスクリプトまで・・・感激しました。
SQL文を当てはめてみたところ、正常に動作しました!
[]なし、!の代わりに.として動きました。
UPDATEの後に2つのテーブルとJOIN位置を指定し、次に更新内容、最後に条件を指定すればいいんですね。
複雑に思えていた構文がすっきりと理解できました。これなら応用も利きそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「テーブルに座って……」という...
-
AccessのSQL 部分一致したデー...
-
外部キーだけのテーブル(主キ...
-
飲み会で、座敷orテーブルどち...
-
会社の飲み会の幹事になり、座...
-
コンボボックスにレコードセッ...
-
まるいテーブル 円い 丸い 漢字...
-
面接のときテーブルが正面に。...
-
アクセスのリンクテーブル一覧...
-
データベースの接続に失敗して...
-
Excel:テーブルではなく、ただ...
-
リレーションシップが出来ません。
-
SQL Server management studio ...
-
男性と2人で飲食店に行きテーブ...
-
SQLでテーブルの値を集計して、...
-
複数のAccessを統合する方法
-
off of と fromの違いを教えて...
-
ACCESS テーブルのRENAME
-
モンスターハンター3rd テーブル
-
お金持ちのテーブル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「テーブルに座って……」という...
-
AccessのSQL 部分一致したデー...
-
外部キーだけのテーブル(主キ...
-
テーブルリンク リンク元を知...
-
会社の飲み会の幹事になり、座...
-
mysqlのupdate構文についての質...
-
面接のときテーブルが正面に。...
-
L2SWはARPテーブルを持っている?
-
飲み会で、座敷orテーブルどち...
-
下記、問題に対しての解答が以...
-
お金持ちのテーブル
-
【エクセル】データテーブルの...
-
男性と2人で飲食店に行きテーブ...
-
ACCESS テーブルのRENAME
-
アクセスのリンクテーブル一覧...
-
時給の変更に対応する方法
-
論理名とコメント構文(?)について
-
SQLです教えてください。
-
SNMPでスイッチのMACアドレステ...
-
テーブル:生徒名簿 生徒名簿の...
おすすめ情報