我的问题涉及在查询中检索和使用自动增量值
我有三个表,tab1,tab2和tab3。
tab1与tab3 有一对一的关系(非TNF我知道,但由于时间问题需要)。
tab2与tab3有多对一的关系。
过去,当tab1和tab2之间存在一对一的关系时,tab3 DID没有条目。我想在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()并在更新中使用它。
答案 0 :(得分: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
;