0

我正在尝试编写一个查询,将行插入两个表 tableA 和 tableB。tableA 是可以发送给用户的电子邮件列表,而 tableB 包含我们支持的各种语言的所述电子邮件的实际文本。tableA 中的自动增量 ID 存储在 tableB 中,以将电子邮件名称与文本连接起来。

从插入到 tableA 的新行中获取 id 然后在插入到 tableB 的查询中使用的最佳方法是什么?我试过了,但 mySQL 不喜欢它(错误 1064):

INSERT INTO tableA (eID, name, otherStuff) VALUES (NULL, 'emailName', 'otherValues');
INSERT INTO tableB (id, emailId, body, name, langId) VALUES (NULL, select max(tableA.eID) from tableA, 'email text', 'Default', '1');
INSERT INTO tableB (id, emailId, body, name, langId) VALUES (NULL, select max(tableA.eID) from tableA, 'other language text', 'Default', '2');

关于如何使这项工作的任何想法?

谢谢

4

3 回答 3

3

使用LAST_INSERT_ID(). 它返回ID给新行的最后一个(在当前连接处)。

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

于 2012-10-03T18:23:28.603 回答
1

mysql 函数 LAST_INSERT_ID() 将返回最后插入行的 id。

所以你可以试试

INSERT INTO tableA (eID, name, otherStuff) VALUES (NULL, 'emailName', 'otherValues');
SET @tableA_id = LAST_INSERT_ID();
INSERT INTO tableB (id, emailId, body, name, langId) VALUES (NULL, @tableA_id, 'email text', 'Default', '1');
INSERT INTO tableB (id, emailId, body, name, langId) VALUES (NULL, @tableA_id, 'other language text', 'Default', '2');
于 2012-10-03T18:22:24.640 回答
0

也许LAST_INSERT_ID()会起作用?

尝试以下形式:

insert INTO tableB(...)
  SELECT LAST_INSERT_ID(), 'literals' from TableA
于 2012-10-03T18:24:22.440 回答