42

我正在尝试使用同一表中不同行(和不同列)中的值更新表中的行。与此类似,尽管我的语法没有产生任何结果:这是代码(更新):

UPDATE table1 AS t1 INNER JOIN
(SELECT field_id_46,field_id_47 FROM table1 WHERE entry_id = 36) AS t2
SET t1.field_id_60 = t2.field_id_46, t1.field_id_61 = t2.field_id_47
WHERE t1.entry_id = 45;
4

5 回答 5

70
update table as t1
inner join (
select field_id_46,field_id_47 from table where entry_id = 36) as t2
set t1.field_id_60 = t2.field_id_46,
    t1.field_id_61 = t2.field_id_47
where t1.entry_id = 45

或者,简单地说

update table as t1,
(
select field_id_46,field_id_47 from table where entry_id = 36) as t2
set t1.field_id_60 = t2.field_id_46,
    t1.field_id_61 = t2.field_id_47
where t1.entry_id = 45
于 2012-05-01T19:25:18.733 回答
21

添加..

相同的表,具有多个寄存器

UPDATE table t1
INNER JOIN table t2 ON t2.entry_id = t1.entry_id
SET t1.field_id_60 = t2.field_id_60,
    t1.field_id_61 = t2.field_id_61
于 2014-01-27T12:32:12.043 回答
8

您可以使用内部联接进行更新,如下所示:

UPDATE table1 AS t1 
    INNER JOIN table1 AS t2 
    SET t1.field_id_60 = t2.field_id_46, 
        t1.field_id_61 = t2.field_id_47 
WHERE t1.entry_id = 54;
于 2014-02-07T07:55:46.763 回答
0

我发现这个问题非常有用,因为我试图在特定数据库使用 hibernate_sequence 表时手动插入表。我使用这个问题的解决方案来修改我的导入脚本。我有一个脚本,其中一个接一个地包含许多“插入”语句,我必须手动设置 id。例如:

insert into T01_REGIONS (ID, NAME) VALUES ({the next id from hibernate_sequence}, 'name1');
insert into T01_REGIONS (ID, NAME) VALUES ({the next id from hibernate_sequence}, 'name2');
..
.

所以我做的是以下解决我的问题:

insert into T01_REGIONS (ID, NAME) VALUES ((select next_val from hibernate_sequence limit 1), 'name1');update hibernate_sequence as t1, (select next_val+1 as next from hibernate_sequence limit 1) as t2 set t1.next_val = t2.next;
insert into T01_REGIONS (ID, NAME) VALUES ((select next_val from hibernate_sequence limit 1), 'name2');update hibernate_sequence as t1, (select next_val+1 as next from hibernate_sequence limit 1) as t2 set t1.next_val = t2.next;
..
.

在我的 sql 脚本的每一行末尾添加额外的查询很容易使用 notepad++。我知道这可能非常难看,但它确实对我有用,以便在我的数据来自 oracle hibernate 操作的数据库时将数据导入到测试 hibernate 操作的 mysql 数据库。

于 2017-12-22T11:39:21.547 回答
-1

你不需要这个查询

SELECT field_id_46,field_id_47 FROM table WHERE entry_id = '36'

你应该这样做:

UPDATE table SET (field_id_60,field_id_61) ('coming_value','other_value') WHERE entry_id = '45';

您也可以使用 2 个不同的列来执行此操作。我认为您可以这样做。但我可能不知道。您应该使用哪种语言拆分此查询。在第一种方法中,您应该使用此查询。

SELECT field_id_46,field_id_47 FROM table WHERE entry_id = '36'

您还可以返回来自此数据的字符串。然后您可以在更新函数中使用此返回值。

于 2012-05-01T19:01:34.757 回答