在查询中检索和使用自动增量值
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