如何在update语句中的SQL Server中的WHERE子句中使用多列

如何在update语句中的SQL Server中的WHERE子句中使用多列,sql,sql-server,xml,insert,sqlxml,Sql,Sql Server,Xml,Insert,Sqlxml,我试图在SQLServer中编写一个SQL/XML查询来更新数据库表中的某一行。我有两个表:第一个叫做edition的表,其中包含id、year、translations和book等列 范例 id=“17” 年份=“1997” 翻译= <Translations> <Translation Language="English" Price="120" /> <Translation Language="Russian" Price="110"

我试图在SQLServer中编写一个SQL/XML查询来更新数据库表中的某一行。我有两个表:第一个叫做edition的表,其中包含id、year、translations和book等列

范例

  • id=“17”
  • 年份=“1997”
  • 翻译=

    <Translations>
         <Translation Language="English" Price="120" />
         <Translation Language="Russian" Price="110" />
    </Translations>
    
    但是现在我想使用如下所示的
    WHERE
    子句向语句中添加条件,但我一直得到一个错误

    在需要条件的上下文中指定的非布尔类型的表达式

    添加到条件的原因是仅更新最新版本。 如何修改SQL Server中要接受的条件?

    请尝试:

    UPDATE edition
    SET ...
    FROM edition INNER JOIN book ON edition.book = book.id
    WHERE title = 'Encore une fois'
    AND year IN (SELECT MAX(e2.year)
                 FROM edition AS e2
                 WHERE e2.book = book.id)
    

    您的内部选择有“id,MAX(year)”,但没有“groupby”,因此将失败。请把它修好。SQL Server不支持中的多列,您需要使用EXISTS或其他类似语法。请同时发布表的定义和一些示例数据。“SQL开发人员”?您使用的是Oracle而不是SQL Server吗?-在ANSI-92 SQL标准中(超过25年前),用正确的ANSI
    JOIN
    语法替换了老式的逗号分隔表列表样式,不鼓励使用它
    WHERE(book , year) IN (SELECT id, MAX(year) 
                           FROM book AS b, edition AS e
                           WHERE title = 'Encore une  fois'
                             AND b.id = e.book
                           GROUP BY 1)
    
    UPDATE edition
    SET ...
    FROM edition INNER JOIN book ON edition.book = book.id
    WHERE title = 'Encore une fois'
    AND year IN (SELECT MAX(e2.year)
                 FROM edition AS e2
                 WHERE e2.book = book.id)