使用多选列插入表B中的行时更新表A.

时间:2014-10-08 23:27:51

标签: sql sql-update

我有2个这样的表:

Visitors     ID|Name|Visit_from|To|image 
Visitor_log  ID|Name|Visit_from|To|requestor

当我将记录插入Visitor_log时,访问者表中的日期会更新。我请求1位访客时使用此功能。问题是Visitor_log.Visitor字段是一个多选字段,因此代码仅适用于一个访问者:

sub row_inserted (rsold, rsnew)

ew_execute ("UPDATE [Visitors] SET [To Visit On] = ('" & rsnew("To Visit On") & "'), 
[To] = ('" & rsnew("To") & "') 
WHERE [Visitors].[Visitor(s) Name] = ('" & rsnew("Visitor") & "');")

where子句变为:

WHERE [Visitors].[Visitor(s) Name] = (Visitor A)

但是当选择多个访问者时,它变为:

WHERE [Visitors].[Visitor(s) Name] = (Visitor A, Visitor B, Visitor C)

访问者表中没有名为Visitor A, Visitor B, Visitor C的访问者作为一个名称,因此SQL查询失败。

我已经被困在这一段时间了,现在任何帮助都非常感谢。

更新:我已将查询设置为response.write以显示SQL正在执行的操作...

sql: UPDATE [Visitors] SET [To Visit On] = ('10/10/2014'), [To] = ('10/10/2014') WHERE [Visitors].[Visitor(s) Name] = ('Mark M, Paul P');

3 个答案:

答案 0 :(得分:1)

审核您的更新,我认为您的问题在于引号。应引用每个不同的值,您应该使用IN运算符。 所以你的查询应该是这样的:

UPDATE [Visitors] SET [To Visit On] = ('10/10/2014'), [To] = ('10/10/2014')
WHERE [Visitors].[Visitor(s) Name] IN ('Mark M', 'Paul P');

因此假设rsnew(“visitor”)是由逗号分隔的一串值,并且您的语言是Vbscript,您可以这样做

ew_execute ("UPDATE [Visitors] SET [To Visit On] = ('" & rsnew("To Visit On") & "'), 
[To] = ('" & rsnew("To") & "') 
WHERE [Visitors].[Visitor(s) Name] IN ('" & replace(rsnew("Visitor"),",","','") & "');")

答案 1 :(得分:0)

也许你可以在visitor_log表上定义一个触发器来更新访问者表。 在Mysql中,这将是这样的:

CREATE TRIGGER visitor_log_insert_trigger AFTER INSERT ON visitor_log
FOR EACH ROW 
   UPDATE visitor SET visitor.to = NEW.to, visitor.visit_from = NEW.visit_from
   WHERE visitor.name=NEW.name;

答案 2 :(得分:-1)

解决!

以下是完整的工作答案:

Dim sql
sql = ("UPDATE [Visitors] SET [To Visit On] = ('" & rsnew("To Visit On") & "'), [To] = ('" & rsnew("To") & "') WHERE [Visitors].[Visitor(s) Name] IN ('" & replace(rsnew("Visitor"),", ","','") & "');")
Call ew_Execute(sql)

这是smalarons的答案,轻微编辑替换语句中的间距。

感谢大家的支持。