こんばんは
次のような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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) EXCEL関数(数式)を教えてください 2 2022/06/08 18:32
- Excel(エクセル) vba 複数の行を非表示の時コードのまとめ方 3 2022/11/17 15:01
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript 正規表現について質問です。条件に合う場合はtrueを返したい 3 2022/10/06 23:02
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) 中身がFALSEなのにTRUEになる 2 2022/11/25 09:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Server management studio ...
-
テーブルリンク リンク元を知...
-
飲み会で、座敷orテーブルどち...
-
L2SWはARPテーブルを持っている?
-
外部キーだけのテーブル(主キ...
-
論理名とコメント構文(?)について
-
複数テーブルにわたるCOUNT
-
男性と2人で飲食店に行きテーブ...
-
会社の飲み会の幹事になり、座...
-
まるいテーブル 円い 丸い 漢字...
-
更新されたテーブルを表示したい
-
【PHP】SQL文のSUM関数で出力し...
-
Oracleのテーブルサイズ
-
ACCESSで3ファイルを結合して、...
-
BLOB項目追加後のInsert実行エ...
-
1対1のリレーション(主キー同...
-
面接のときテーブルが正面に。...
-
下の画像はSQLの4大命令の性質...
-
一致するデータのみ削除したい
-
「テーブルに座って……」という...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
L2SWはARPテーブルを持っている?
-
外部キーだけのテーブル(主キ...
-
男性と2人で飲食店に行きテーブ...
-
テーブルリンク リンク元を知...
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
アクセスのリンクテーブル一覧...
-
ターンテーブルの、電子レンジ...
-
飲み会で、座敷orテーブルどち...
-
【PHP】SQL文のSUM関数で出力し...
-
まるいテーブル 円い 丸い 漢字...
-
テーブル:生徒名簿 生徒名簿の...
-
1対1のリレーション(主キー同...
-
論理名とコメント構文(?)について
-
面接のときテーブルが正面に。...
-
一致するデータのみ削除したい
-
複雑なSQL文について
-
SQL構文です 画像のようにした...
-
件数の多い順にselect
-
お金持ちのテーブル
おすすめ情報