sql - 如何在更新语句中的 SQL Server 的 WHERE 子句中使用多个列
问题描述
我正在尝试在 SQL Server 中编写 SQL/XML 查询来更新数据库表中的某一行。我有两个表:第一个叫做 edition with columns id, year, translations, book
。
例子
- id = "17"
- 年份 = "1997"
翻译=
<Translations> <Translation Language="English" Price="120" /> <Translation Language="Russian" Price="110" /> </Translations>
书=“11”
第二个表称为 book 具有以下列:id、title。Example(id = "11" , Title = "Encore une fois")
我已经编写了以下查询,到目前为止工作正常
UPDATE edition
SET translations.modify('insert element Translation {attribute Language
{"Norwegian"}, attribute Publisher {"KLC"}, attribute Price {200}} as last
into (/Translations)[1]');
但是现在我想使用WHERE
如下子句向我的语句添加条件,但我一直收到错误
在预期条件的上下文中指定的非布尔类型的表达式
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)
添加条件的原因是仅更新最新版本。如何修改 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)
推荐阅读
- html - 如果直接在带有按钮的 HTML 中,引导模式可以完美工作,但如果它包含在具有动态输入的 React 组件中,则不会响应
- ember.js - 想在 ember js 中调用链接控制器的动作吗?
- javascript - 如何修复 Element 隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型?
- android-studio - 如何以图像形式显示使用arraylist和parcelable发送的意图过程中的数据?
- omnet++ - 在 Oment 静脉中,如何通过提供不发送或接收任何消息的车辆 ID 来获取车辆的速度?
- c# - 如何将条件字符串转换为布尔格式?
- angular - 想在 authguard 服务中调用服务方法
- xamarin.ios - 在win10上开发Xamarin不再需要Visual Studio 2019?
- php - laravel eloquent 如何获得区域的财务平衡
- kubernetes - 通过集群外的 pod IP 访问 pod 应用