将VBA Update查询转换为SQL语法

时间:2016-06-30 19:40:37

标签: sql vb6 access-vba

我正在开发一个具有许多内联sql查询的访问应用程序,其语法与直接在ssms中执行的常规查询的语法非常相似,但存在一些差异。现在我遇到了一个我不太了解的更新查询。它在update语句之后立即使用内部联接,但ssms不喜欢构造此查询的方式。

我正在寻求帮助以了解如何正确转换查询,因为我根本不想更新错误的表。

这是没有转换的查询:

UPDATE Product
INNER JOIN 
(
    (   Arrangement 
        INNER JOIN Publishers 
            ON Arrangement.PubKey = Publishers.BookPubKey
    ) 
    INNER JOIN Arrangement_Notation_File 
        ON Arrangement.ArrangementID = Arrangement_Notation_File.ArrangementID
) 
ON Product.ProductID = Arrangement_Notation_File.ProductID 

SET 
    Product.Title = [arrangement].[Title], 
    Product.ProductType = ProductType, 
    Product.ForSale = -1, 
    Product.IsDigital = -1, 
    Product.ListPrice = [Arrangement].[Price], 
    Product.PublicationDate = iif(isnull(FirstPublicationDate), iif(isnull(PublicationDate), '" & Now() & "', PublicationDate), FirstPublicationDate), 
    Product.SongID = Arrangement.SongID  

WHERE (((Arrangement_Notation_File.ProductID)='" & ID & "'));

1 个答案:

答案 0 :(得分:1)

如果您尝试以下内容怎么办?请注意,SETJOIN已互换,并使JOIN正确。

UPDATE P
SET 
    Product.Title = [arrangement].[Title], 
    Product.ProductType = ProductType, 
    Product.ForSale = -1, 
    Product.IsDigital = -1, 
    Product.ListPrice = [Arrangement].[Price], 
    Product.PublicationDate = iif(isnull(FirstPublicationDate), iif(isnull(PublicationDate), '" & Now() & "', PublicationDate), FirstPublicationDate), 
    Product.SongID = Arrangement.SongID 
FROM Product P
INNER JOIN Arrangement_Notation_File ANF ON P.ProductID = ANF.ProductID 
INNER JOIN Arrangement A ON A.ArrangementID = ANF.ArrangementID
INNER JOIN Publishers PU ON A.PubKey = PU.BookPubKey
WHERE ANF.ProductID ='" & ID & "';