0

我的问题与在查询中检索和使用自动增量值有关

我有三个表,tab1、tab2 和 tab3。

tab1 与 tab3 有 1 对 1 的关系(我知道非 TNF,但由于时间问题是必要的)

tab2 与 tab3 具有多对一的关系。

过去,当 tab1 和 tab2 之间存在一对一关系时,tab3 没有条目。我想在 tab3 中创建缺失的记录。tab1 和 tab2 包含一个外键字段 tab3_id。

基于 tab1 和 tab2 中 col2 的共同值,(实际上并不那么简单,但可以解决这个问题)我可以轻松地在 tab3 中创建记录

INSERT INTO tab3 (tab1_id, tab1_value, tab2_id, tab2_value) 
   SELECT
     tab1.col1 AS tab1_id, 
     tab1.col2 AS tab1_value,
     tab2.col1 AS tab2_id, 
     tab2.col2 AS tab2_value
     FROM  `tab2` 
     INNER JOIN tab1 
     ON tab1.col2 = tab2.col2

(为简单起见,我省略了检查以确保 tab3 中没有链接记录)

但是我不知道如何捕获idtab3的主键()的自动递增值以更新tab1和tab2。我搜索了 MYSQL 文档、Stack Overflow 和更一般的 google 搜索,但一无所获。

实际上是否可以在上面的某处插入更新语句并捕获 LAST_INSERT_ID() 并在更新中使用它。

4

1 回答 1

0

我认为唯一的方法是在开头插入一个占位符行,然后将该行与其他更新一起更新

insert into tab3 set tab3_id = null;
set @tab3id = (select last_insert_id();)

update tab3,
    tab2 
    inner join tab1 on tab1.col2 = tab2.col2 
    set tab3.tab1_id = tab1.col1, tab3.tab1_value=...
    , tab1.tab3_id = @tab3id
    where 
   tab3.id = @tab3id
;
于 2013-05-08T13:13:32.747 回答