如何在MySQL中更新选择?

时间:2013-12-25 22:00:31

标签: mysql

我有一个表格内容,我在其中添加有关页面的信息。

id history_id title body.
1   0          home   this home
2   1          home   here is sometext.

我正在使用history_id来跟踪对页面所做的更改,这里我想恢复对记录id = 1所做的更改,同时使用以前的内容创建新记录。

我试过这个。

INSERT INTO content(id, history_id, title, body)
select id, history_id, title, body;
UPDATE content (SELECT title, body WHERE id = 1)
SET title = 'title', body='body';

它已成功创建包含先前内容但未更新当前记录的新记录。任何人都可以帮助我如何更新选择?我应该在这里做些什么改变?感谢。

3 个答案:

答案 0 :(得分:0)

您的UPDATE查询未正确写入

UPDATE content SET title = 'title', body = 'body' WHERE id = 1;

SELECT上使用UPDATE

UPDATE content a LEFT JOIN content b ON (a.id = b.history_id AND a.id = 1)
    SET a.title = b.title, a.body = b.body;

我不完全确定您的内容历史记录是如何工作的,但我根据我的最佳猜测形成了一个查询

答案 1 :(得分:0)

我不完全确定我理解你想要什么,但要根据现有记录进行更新

UPDATE content a, content b SET a.title = b.title, a.body = b.body WHERE a.id = '1' AND b.id = '2';

其中a.id是您要替换的记录,b.id是您要复制的记录。 您可能还希望在insert语句中包含WHERE子句,否则您将复制表中的每条记录:

INSERT INTO content(id, history_id, title, body) SELECT id, history_id, title, body FROM content WHERE id = 1;

其中id是您要复制的记录


基于mysql forums

答案 2 :(得分:0)

最后我想出了更新选择。

UPDATE content c, 
(SELECT 
    c1.title AS title, 
    c1.body AS body
 FROM content c1
 WHERE c1.id = x) AS c2
 SET
    c.title = c2.title,
    c.body = c2.body
WHERE id = x;