3

编辑我没有 CREATE TEMPORARY TABLE 权限。还有其他方法吗?

MySQL 数据库有一个User包含id列的表。

另一个表UserThing有一个user列,它是一个外键User.id

我正在尝试将一行插入UserThing中的某些行User,就像这样。

INSERT INTO `UserThing` (`user`, `foo`, `bar`)
SELECT `id`, 123, 456 FROM `User` WHERE some_condition;

我很确定这没问题,只是有一个触发器UserThing可能会更新User. 这会创建一个 MySql 不允许的依赖循环,尽管我知道这个触发器的操作是正交的,some_condition所以在实践中并不重要。

我知道我可以SELECT @some_var := ...为单个值编写,但我不能让它为多个值工作。局部变量是解决此问题的正确方法吗?如果是这样,请问语法是什么?如果没有,是否有其他纯 SQL 方法可以做到这一点?

4

1 回答 1

0

我会使用一个临时表并将它们INSERT INTO ... SELECT FROM分解为以下语句:

SELECT `id`, 123, 456 INTO #tmp FROM `User` WHERE some_condition;

INSERT INTO `UserThing` (`user`, `foo`, `bar`)
SELECT * FROM #tmp

DROP TABLE #tmp
于 2012-12-22T00:45:34.530 回答