我搜索了互联网,文档以及有关stackoverflow的广泛搜索,但无济于事。 我正在使用MySQL Workbench尝试在特定列的末尾连接一些其他值 我原来的代码是:
update mySchema.myTable
set myColumn = CONCAT( myColumn ,
', "a108": "Additional Data.",
"a109": "More Additional Data. "'
)
where primaryKeyColumn =
(
select primaryKeyColumn
from mySchema.myTable
where column3 = "testdata" AND column4 = aNumber
);
但是,这引发了错误“错误代码:1093。您无法为FROM子句中的更新指定目标表'转换'”。我在stackoverflow上搜索并将我的代码更改为:
update mySchema.myTable
set myColumn = CONCAT( myColumn ,
', "a108": "Additional Data.",
"a109": "More Additional Data. "'
)
where primaryKeyColumn in
(
select primaryKeyColumn from
(
select primaryKeyColumn
from mySchema.myTable
where column3 = "testdata" AND column4 = aNumber
) as tempTable
);
现在抛出“错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用KEY列的WHERE的表要禁用安全模式,请切换首选项中的选项 - > SQL编辑器和重新连接“。
我已经检查过,而且primaryKeyColumn绝对是主键。任何帮助将不胜感激。
答案 0 :(得分:0)
啊,我不知道这是否是唯一的答案,但我能够通过这样做得到它:
SET @myPrimaryKey = (select primaryKeyColumn from mySchema.myTable where column3 = "testdata" AND column4 = aNumber);
update mySchema.myTable
set myColumn = CONCAT( myColumn ,
', "a108": "Additional Data.",
"a109": "More Additional Data. "'
)
where primaryKeyColumn = @myPrimaryKey;
这样做了。
答案 1 :(得分:0)
我不明白为什么表需要被引用两次。
为什么我们不会直接使用column3和column4上的条件来引用要更新的行,例如
UPDATE mySchema.myTable t
SET t.myColumn = CONCAT( t.myColumn , '...')
WHERE t.column3 = 'testdata'
AND t.column4 = aNumber
(我也不清楚aNumber
是什么......如果它是对表格中某列的引用,那么最好的模式就是限定它。)
在更一般的情况下,我们有一个子查询来获取需要更新的行的标识符,我们通常可以使用内联视图,并在UPDATE中执行JOIN操作
UPDATE mySchema.myTable t
JOIN ( SELECT q.primaryKeyColumn
FROM mySchema.myTable q
WHERE q.column3 = 'testdata'
AND q.column4 = aNumber
) s
ON s.primaryKeyColumn = t.primaryKeyColumn
SET t.myColumn = CONCAT( t.myColumn , '...')
我强烈建议在运行UPDATE之前先将其作为SELECT语句编写,然后查看结果。
SELECT s.primaryKeyColumn
, CONCAT( t.myColumn , '...') AS newval_myColumn
, t.myColumn AS oldval_myColumn
FROM mySchema.myTable t
JOIN ( SELECT q.primaryKeyColumn
FROM mySchema.myTable q
WHERE q.column3 = 'testdata'
AND q.column4 = aNumber
) s
ON s.primaryKeyColumn = t.primaryKeyColumn