Pau*_*lin 4 sql oracle ora-00933 sql-update
我想更新一个表,表明某些行是其他行的父级,所以我在表中添加了一个"parentid"列.以下查询查找所有父项:
SELECT ca1.id, ca2.id
FROM contactassociations ca1
JOIN contactassociations ca2 ON (ca1.contactid = ca2.contactid)
where ca1.entitytable = 'EMPLOYER' AND
ca2.entitytable = 'CLIENT';
Run Code Online (Sandbox Code Playgroud)
但是当我尝试调整该语法来进行更新时,它不起作用:
UPDATE contactassociations ca1
SET ca1.parentid = ca2.id
JOIN contactassociations ca2 ON (ca1.contactid = ca2.contactid)
WHERE ca1.entitytable = 'EMPLOYER' AND ca2.entitytable = 'CLIENT';
Run Code Online (Sandbox Code Playgroud)
我明白了:
Error starting at line 6 in command:
UPDATE contactassociations ca1
SET ca1.parentid = ca2.id
JOIN contactassociations ca2 ON (ca1.contactid = ca2.contactid)
WHERE ca1.entitytable = 'EMPLOYER' AND ca2.entitytable = 'CLIENT'
Error at Command Line:7 Column:28
Error report:
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
Run Code Online (Sandbox Code Playgroud)
注意,第7行第28列是"SET"行的结尾.
Qua*_*noi 11
Oracle不支持JOIN语句中的子句UPDATE.
用这个:
MERGE
INTO contactassociations ca1
USING contactassociations ca2
ON (
ca1.contactid = ca2.contactid
AND ca1.entitytable = 'EMPLOYER'
AND ca2.entitytable = 'CLIENT'
)
WHEN MATCHED THEN
UPDATE
SET parentid = ca2.id
Run Code Online (Sandbox Code Playgroud)
小智 5
我发现以下样式更易于阅读,但您需要在 UPDATE 关键字后使用别名,而不是表名:
UPDATE ca1
SET ca1.parentid = ca2.id
FROM contactassociations ca1
LEFT JOIN contactassociations ca2 ON (ca1.contactid = ca2.contactid)
WHERE ca1.entitytable = 'EMPLOYER' AND ca2.entitytable = 'CLIENT'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21492 次 |
| 最近记录: |