- ベストアンサー
複数テーブルが絡む複雑なUPDATE文の書き方
- 複数テーブルを参照して条件を指定するUPDATE文の書き方について解説します。
- Parentテーブルで、親が子持ちであり、年齢が20歳の人を対象に、Childrenテーブルでその親の男の子のフラグを変更する方法について説明します。
- 実行結果として、20歳の親を持つ男の子のフラグが変更されることが示されています。
- みんなの回答 (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位置を指定し、次に更新内容、最後に条件を指定すればいいんですね。 複雑に思えていた構文がすっきりと理解できました。これなら応用も利きそうです。