我想在 mailers 表中创建一条新记录,其中三个字段将包含值:contacts_first_filter_id、mailer_states_id、created_at。其中两个值基于来自其他表的查询,最后一个值只是当前时间。
我尝试了多种方法来实现这一点,但没有一个奏效。首先,我尝试直接在 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
这会产生错误:“查询输入必须包含至少一个表或查询”。
我使用 INNER JOIN 尝试了以下建议,但是虽然这不会产生错误,但它会附加 0 行,大概是因为 update_mailer_step_two 和 mailer_states 之间没有 INNER JOIN 链接:
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 的字段,其中包含一堆与数据库中的联系人相关联的 id。因此,mailer_states 和 update_mailer_step_2 之间根本没有任何关系。
** 我认为我能够做的是,当我创建 update_mailer_step_two 时,添加一个新列并将其默认为对应于 mailer_states 的值,以便 INNER JOIN 可以工作。不幸的是,您似乎无法在 Access 中执行此操作!
另一个stackoverflow帖子提到您可以:
但这对我不起作用。
我已经没有关于如何将基于其他表的查询作为查询的值放置的想法,该查询旨在在表中创建新记录。
感谢您的回复。