在查询中检索和使用自动增量值

Posted

技术标签:

【中文标题】在查询中检索和使用自动增量值【英文标题】:retrieving and using the auto-increment value WITHIN a query 【发布时间】:2013-05-08 12:43:07 【问题描述】:

我的问题与有关

我有三个表,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 中没有链接记录)

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

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

【问题讨论】:

【参考方案1】:

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

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
;

【讨论】:

以上是关于在查询中检索和使用自动增量值的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 MS-Access 中的最后一个自动增量值,例如 Sql Server 中的 @@Identity

在插入中立即使用自动增量值

如何在 SQLite 的插入查询中返回自动增量值?

C#获取mysql自动增量值[重复]

如何使用 PDO 在 MySQL 中找到下一个自动增量值? [复制]

如何在sql中获取下一个自动增量值