我有一个案例,我正在进行两次查询:query1
是INSERT ... ON DUPLICATE KEY UPDATE
上的批量table1
。对于query2
,我想在INSERT
上使用一些应用程序数据执行另一个批量table2
,并使用从query1
插入/更新的ID。我知道我可以通过中间查询执行此操作,从table1
中选择我需要的ID,然后将它们与应用程序数据一起插入table2
,但我真的想避免额外的网络返回 - 和 - 该查询的第四个以及数据库开销。有没有什么方法可以在运行时query1
插入/更新ID,或者在INSERT ... SELECT FROM
中执行某种复杂但相对便宜的query2
来避免这种情况?
据我所知,如果没有单独的查询,就无法从query1
返回添加/修改的ID,而我无法想到批量INSERT ... SELECT FROM
的方法,其中每个的插入值都是行取决于所选择的值,但我希望被证明是错误的,或者展示出一种方法。
答案 0 :(得分:2)
由于批量INSERT
,无法获取一组ID。
您有一个选项确实是运行SELECT
查询来获取ID并在第二个批量INSERT
中使用它们。但这很麻烦。
另一种选择是将第二批量INSERT
投放到临时表中,让我们称之为table3
,然后使用INSERT INTO table2 ... SELECT FROM ... table1 JOIN table3 ...
使用类似的用例,我们最终发现这是最快的选项,因为您正确地索引table3
。
请注意,在这种情况下,您不需要在代码中循环SELECT
,这很不错。