sql - 更新时左连接 ORA-00971:缺少 SET 关键字 SQL
问题描述
ORA97100 missing SET keyword
尝试运行这个简单的 UPDATE 语句时,我遇到了一个令人困惑的错误。
UPDATE
WFINANCE.RKAP_PROYEKSI a
LEFT JOIN
WFINANCE.RKAP_MASTER_KODE b ON b.ID_KODE = a.KODE_ANGGARAN
SET
a.STATUS = 'Waiting Approval',
a.T_ID = 'TR1234'
WHERE
a.TAHUN = '2018'
AND
b.KET_KD_GAS = 'BJU'
我也尝试使用“AS”,但仍然出错。
任何深思熟虑的建议将不胜感激。
谢谢
解决方案
首先 - 将 RKAP_MASTER_KODE 的连接设为外连接没有意义。WHERE 子句中的存在b.KET_KD_GAS = 'BJU'
将其变为内部连接,因为b.KET_KD_GAS = 'BJU'
查询不能接受不存在的行,因此要求 RKAP_MASTER_KODE 中的行存在。如果您真的希望连接是可选的,那么将b.KET_KD_GAS
谓词移动到连接子句中 - 但如果您这样做,那么加入 RKAP_MASTER_KODE 有什么意义,因为您使用它来选择性地限制结果,这并不是真正的“限制” .
但是,除此之外,Oracle 不允许在 UPDATE 语句中进行联接。解决方法是使用 sub-SELECT 将更新限制为适当的行:
UPDATE WFINANCE.RKAP_PROYEKSI a
SET a.STATUS = 'Waiting Approval',
a.T_ID = 'TR1234'
WHERE a.TAHUN = '2018' AND
a.KODE_ANGGARAN IN (SELECT b.ID_KODE
FROM WFINANCE.RKAP_MASTER_KODE b
WHERE b.KET_KD_GAS = 'BJU')
如果您真的不在乎 RKAP_MASTER_KODE 中是否有匹配的行,只需删除 UPDATE 的那部分:
UPDATE WFINANCE.RKAP_PROYEKSI a
SET a.STATUS = 'Waiting Approval',
a.T_ID = 'TR1234'
WHERE a.TAHUN = '2018'
推荐阅读
- php - 我的会话一直发送一个固定值,而它应该是可变的
- jquery - jQuery:按钮被按下 X 次
- laravel - 在现有的 laravel 上安装 laravel 5.6 的主题
- ruby-on-rails - pundit rspec - 未初始化的常量 UserPolicy,为什么?
- c# - 如何转换通用列表
到通用列表 ? - javascript - 如何在 SelectListActions 中添加复选框
- java - 使用Mybatis和不同DB进行集成测试开发时如何做集成测试
- javascript - Angular JS - Ui-select js文件未加载
- c++ - 双端队列迭代器不可递减
- css - 是否可以在 HTML5 对话框背景中添加模糊效果?