mailers テーブルに新しいレコードを作成したいと考えています。このレコードには、contacts_first_filter_id、mailer_states_id、created_at の 3 つのフィールドに値が含まれます。これらの値のうちの 2 つは、他のテーブルからのクエリに基づいており、最後の値は現在の時刻です。
これを達成するために複数の方法を試しましたが、うまくいきませんでした。最初に、SQL デザイン内で直接クエリを作成してみました。
INSERT INTO mailers ( contacts_first_filter_id, mailer_states_id, created_at )
VALUES (DLookup("id","update_mailer_step_two"), DLookup("id","mailer_states" & "mailer_state = 'sent'"), Now());
これにより、エラー「不明」が発生します。
また、これをVBAエディターに入れて、ボタンのクリックでトリガーしようとしました:
Private Sub Command6_Click()
Dim CFF_ID As String, MS_ID As String, strSQL As String
CFF_ID = "SELECT update_mailer_step_two.id FROM update_mailer_step_two"
MS_ID = "SELECT mailer_states.id FROM mailer_states WHERE mailer_states.mailer_state = 'sent'"
strSQL = "INSERT INTO mailers ( contacts_first_filter_id, mailer_states_id, created_at )VALUES ((" & CFF_ID & "),(" & MS_ID & "),NOW())"
DoCmd.RunSQL strSQL
End Sub
これにより、「クエリ入力には少なくとも 1 つのテーブルまたはクエリが含まれている必要があります」というエラーが表示されます。
INNER JOIN を使用して以下の推奨事項を試しましたが、エラーは発生しませんが、おそらく update_mailer_step_two と mailer_states の間に INNER JOIN リンクがないため、0 行が追加されます。
INSERT INTO mailers ( contacts_first_filter_id, mailer_states_id, created_at )
SELECT update_mailer_step_two.id, mailer_states.id, Now()
FROM update_mailer_step_two INNER JOIN mailer_states ON update_mailer_step_two.id = mailer_states.ID
WHERE mailer_states.mailer_state = 'sent';
mailer_states テーブルは、テキスト付きの mailer_state フィールドを含む単なるテーブルです。これは、変更されることのない単なるルックアップ テーブルです。
update_mailer_step_2 には id と呼ばれる 1 つのフィールドが含まれています。これには、データベース内の連絡先に関連付けられた一連の ID が含まれています。したがって、mailer_states と update_mailer_step_2 の間にはまったく関係がありません。
** update_mailer_step_two を作成し、新しい列を追加して、デフォルトで mailer_states に対応する値を設定すると、INNER JOIN が機能するようになると思います。残念ながら、Access ではこれを行うことができないようです。
別のstackoverflowの投稿で、次のことができると述べました。
デフォルト値で列を追加するSQL - Access 2003
しかし、それは私にとってはうまくいきません。
テーブルに新しいレコードを作成することを目的としたクエリの値として、他のテーブルに基づくクエリを配置する方法のアイデアが不足しています。
返信ありがとうございます。