SQL 查询 table 中的更新行并将其作为新行插入
SQL query for update rows in a table and insert those as new rows
这是要实现的:-
- 从 table 中获取一些行 (x)。
- 更改所有 x 行中的一个列值 (f)。
- 然后将那些 x 作为新行插入同一个 table t.
此程序无法正常工作,出现此错误:-
You can't specify target table 't' for update in FROM clause
这是我的程序
DELIMITER //
DROP procedure IF EXISTS copy_values //
CREATE PROCEDURE copy_values(
IN source_id char(36),
IN dest_id char(36))
BEGIN
INSERT INTO t (a, b, c, d, e, f)
VALUES (
(SELECT a FROM t WHERE t_cid=source_id),
(SELECT b FROM t WHERE t_cid=source_id),
(SELECT c FROM t WHERE t_cid=source_id),
(SELECT d FROM t WHERE t_cid=source_id),
(SELECT e FROM t WHERE t_cid=source_id),
dest_id
);
END //
DELIMITER ;
您能否建议解决此用例的替代查询?
INSERT ... SELECT ...
应该可以。
...
INSERT INTO t
(a,
...
e,
f)
SELECT a,
...
e,
dest_id
FROM t
WHERE t_cid = source_id;
...
这是要实现的:-
- 从 table 中获取一些行 (x)。
- 更改所有 x 行中的一个列值 (f)。
- 然后将那些 x 作为新行插入同一个 table t.
此程序无法正常工作,出现此错误:-
You can't specify target table 't' for update in FROM clause
这是我的程序
DELIMITER //
DROP procedure IF EXISTS copy_values //
CREATE PROCEDURE copy_values(
IN source_id char(36),
IN dest_id char(36))
BEGIN
INSERT INTO t (a, b, c, d, e, f)
VALUES (
(SELECT a FROM t WHERE t_cid=source_id),
(SELECT b FROM t WHERE t_cid=source_id),
(SELECT c FROM t WHERE t_cid=source_id),
(SELECT d FROM t WHERE t_cid=source_id),
(SELECT e FROM t WHERE t_cid=source_id),
dest_id
);
END //
DELIMITER ;
您能否建议解决此用例的替代查询?
INSERT ... SELECT ...
应该可以。
...
INSERT INTO t
(a,
...
e,
f)
SELECT a,
...
e,
dest_id
FROM t
WHERE t_cid = source_id;
...