使用ALIKE进行MS Access 2016 UPDATE查询

时间:2017-12-09 02:53:13

标签: sql vba ms-access

我正在尝试在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连接的示例。

2 个答案:

答案 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;