我正在使用Oracle SQL Developer,我尝试将更新和选择状态合并为一个。我知道Oracle在更新语句中直接支持FROM或JOINS,因此我将select放在子查询中但它仍然不起作用。
我有两张桌子; MASTERTABLE和TESTTABLE。
MASTERTABLE包含ID_NUMBER列和TESTTABLE_ID列。
TESTTABLE包含TESTTABLE_ID列和TEST_COLUMN列。
我想要做的是更新TEST_COLUMN值,同时只知道ID_NUMBER。
我的陈述是什么样的:
<script src="/js/jquery-1.12.1.min.js" type="text/javascript"></script>
<script src="js/jquery.tablesorter.min.js"></script>
<head>
<script>
function sort_my_table(){
$('my_table').tablesorter();
}
</script>
</head>
但我陷入了某种循环。我哪里出错了?
答案 0 :(得分:0)
我遇到了同样的问题。解决方案是使用MERGE
操作而不是UPDATE
。
MERGE INTO TESTTABLE t
USING
(
SELECT m.ID_NUMBER num,
m.TESTTABLE_ID id
FROM MASTERTABLE m
) newnum ON (t.TESTTABLE_ID = newnum.id)
WHEN MATCHED THEN UPDATE
SET t.TEST_COLUMN = newnum.num;
答案 1 :(得分:0)
您可以在Oracle中尝试其中任何一项
正常更新
UPDATE
TESTTABLE
SET
TEST_COLUMN= 'Testvalue'
WHERE
EXISTS
(SELECT MASTERTABLE.TESTTABLE_ID
FROM MASTERTABLE
WHERE ID_NUMBER=11);
使用内嵌视图(如果Oracle认为可以更新)
注意:如果您遇到非密钥保留行错误,请添加索引以解析相同内容以使其可更新
UPDATE
(SELECT
TESTTABLE.TEST_COLUMN AS OLD,
'Testvalue' AS NEW
FROM
TESTTABLE
INNER JOIN
MASTERTABLE
ON TESTTABLE.TESTTABLE_ID = MASTERTABLE.TESTTABLE_ID
WHERE ID_NUMBER=11) T
SET
T.OLD = T.NEW;
使用合并
MERGE INTO
TESTTABLE
USING
(SELECT
T1.ROWID AS RID,
T2.TESTTABLE_ID
FROM
TESTTABLE T1
INNER JOIN
MASTERTABLE T2
ON TESTTABLE.TESTTABLE_ID = MASTERTABLE.TESTTABLE_ID
WHERE ID_NUMBER=11)
ON
( ROWID = RID )
WHEN MATCHED
THEN
UPDATE SET TEST_COLUMN= 'Testvalue';
答案 2 :(得分:0)
问题在于Tom H写了一个阻塞问题。当我今天开始研究项目时,所有的解决方案都有效。