- ベストアンサー
accessでの表の更新(UPDATE文)
- accessでの表の更新に関して教えてください。
- access2010を使用し、結合したテーブルの更新方法を知りたいです。
- TBL1とTBL2をKeyで結合し、TBL1のNullのM1にTBL2のNumberをセットしたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
【訂正】No.2さんの回答を見て・・・ あちゃー! UPDATE TBL2 INNER JOIN TBL1 ON TBL2.Key=TBL1.Key SET TBL2.M1 = TBL1.M1 WHERE LEN(TBl2.M1 & "")=0; INNER JOIN しているので WHERE節は《ヌルならば》で事足りることを失念し無駄な条件を書いていることに気が付きました。当然に「あっ、そうなんだ!」とは悟られたでしょうが・・・。ここに、明示的に訂正しておきます。なお、IsNUll()ではなくてLEN()を用いる場合は LEN(TBl2.M1=0; は、エラーになります。 LEN(TBl2.M1 & "")=0; とヌル値対策が必要です。
その他の回答 (3)
- chayamati
- ベストアンサー率41% (260/624)
それぞれのテーブルのkeyが主キーまたは重複なしになっていることが前提です。 処理を間違えると逆方向にコピーされます、テーブルのバックアップしてください 添付のように更新クエリを使います。 1.クエリデザインからTBL1、TBL2の表示 2.TBL1.keyからTBL2.Keyへドラッグして関連付けします 3.空白部分右クリックからクエリの種類、更新と進んで更新行を表示させます。 あとは添付図を参考にして下さい テーブル表示域の枠内の右クリックからSQIレビューで次のSQL文が表示されます UPDATE TBL1 LEFT JOIN TBL2 ON TBL1.key = TBL2.key SET TBL1.M1 = [Number] WHERE (((TBL1.M1) Is Null));
- piroin654
- ベストアンサー率75% (692/917)
Where句のところが少し残念ですが、他のところも いろいろありますが、一応以下で動くと思います。 update TBL1 inner join TBL2 on TBL1.Key = TBL2.Key set TBL1.M1 = TBL2.Number where IsNull(TBL1.M1) のように、 where IsNull(TBL1.M1) で十分のはずですが。 IsNullは関数のIsNullを使いますので、Is とNull を離して表記はしません。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
Q、TBL2にTBL1をコピーするには? A、SQL文が苦手であれば・・・ 次のような手もあります。が、これが、仮に学校の宿題であれば、以下の手法はアウトです。 UPDATE TBL2 SET M1 = DBLookup("SELECT M1 FROM TBL1 WHERE Key=" & [Key]) AND LEN(TBL2.M1 & "")=0; *列名は、もちろんM1=>Numberに変更する必要があります。 *回答では、TBL2を更新しています。TBL1でも同じこと。 要は、SQL文の実行結果を戻す関数を用意すれば、結合とか複文とかを考えなくても同じ結果を得ることができるということです。もちろん、邪道と言えば邪道。でも、結果オーライで良ければこれもありですね。 Public Function DBLookup(ByVal strQuerySQL As String, _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function ※※※※※※※※※※※※※※※ PS、本来のやり方 ※※※※※※※※※※※※※※※ UPDATE TBL2 INNER JOIN TBL1 ON TBL2.Key=TBL1.Key SET TBL2.M1 = TBL1.M1 WHERE TBL2.Key=TBL1.Key AND LEN(TBL2.M1 & "")=0;
お礼
ご丁寧にありがとうございました。 こちらも試してみて上手くいきました。
お礼
ご丁寧にありがとうございました。 ご教示頂いた内容で上手くいきました。