我正在尝试在MS Access 2016 VBA中运行以下UPDATE查询:
UPDATE M_Subscriber
SET M_Subscriber.RatingID = t.RatingID
FROM
( SELECT M_Subscriber.ID AS SubscriberID, E_SubscriberRating.ID AS RatingID
FROM M_Subscriber, E_SubscriberRating
WHERE M_Subscriber.Labels ALIKE '%' & E_SubscriberRating.Description & '%'
) AS t
WHERE M_Subscriber.ID = t.SubscriberID
但是,在尝试执行它时,我在查询表达式中出现“语法错误(缺少运算符)”错误。
我知道查询的SELECT部分本身就像预期的那样工作(尽管使用LIKE而不是ALIKE,即使使用*作为通配符......)。
我也尝试过这个版本的查询:
UPDATE M_Subscriber
SET M_Subscriber.RatingID = E_SubscriberRating.ID
FROM M_Subscriber
INNER JOIN E_SubscriberRating
ON M_Subscriber.Labels ALIKE '%' & E_SubscriberRating.Description & '%'
但是同样的错误消息(同样,使用INNER JOIN的独立SELECT语句工作正常)。
我正在尝试做的一些信息:
我的订阅者(在M_Subscriber中)有一个标签字段(只是各种单词的字符串),其中一个字可以是评级。另一方面,我有一个表(E_SubscriberRatings)所有可能的评级词(E_SubscriberRating.Description)。我现在正在尝试根据SubscriberRating的ID设置M_Subscriber.RatingID字段,其描述显示在M_Subscriber.Labels字段中(如果它实际上包含任何此类描述)。
在这一点上,我真的没有想法要调整什么来弄清楚我做错了什么。我发现了各种通过column = column连接但没有使用LIKE连接的示例。
答案 0 :(得分:1)
与其他SQL方言不同,MS Access在FROM
查询中不使用UPDATE
。考虑UPDATE...INNER JOIN
(它与MySQL共享的方法),并使用表别名:
UPDATE M_Subscriber m
INNER JOIN E_SubscriberRating e
ON m.Labels ALIKE '%' & e.Description & '%'
SET m.RatingID = e.ID;
或者,使用WHERE
子句:
UPDATE M_Subscriber m, E_SubscriberRating e
SET m.RatingID = e.ID
WHERE m.Labels ALIKE '%' & e.Description & '%';
答案 1 :(得分:0)
尝试使用以下语法:
UPDATE M_Subscriber INNER JOIN
E_SubscriberRating
ON M_Subscriber.Labels ALIKE '%' & E_SubscriberRating.Description & '%'
SET M_Subscriber.RatingID = E_SubscriberRating.ID;