我在这里做的是将报价转换为PO,这只是我用来执行此操作的查询之一。 router
的主键是RN
,此表中的唯一键是Line Order
。我正在使用Line Order
来允许用户定义router
中行的顺序。由于RN
设置为auto_increment,我不必担心。问题是Line Order
在router
上。我从rfq_operations
选择了多行以插入router
,但它为所有行提供了相同的Line Order
值,我需要它们从MAX(router.Line Order)
增加1
INSERT INTO `router`(`Work Order`, `Line Order`, `Estimated Time`,`Estimated Time Unit`, `Work Center`, `Work Description`, `Work Instruction`)
SELECT ?,(SELECT 1+IFNULL(MAX(`Line Order`),1) FROM `router`),CEIL(((`rfq_operations`.`Program Time`+`rfq_operations`.`Setup Time`+(`rfq_operations`.`Run Time`*(?/`rfq_operations`.`Conversion`)))/60))
,'Hours',`rfq_operations`.`Work Center`,`workcenter`.`Information`,`rfq_operations`.`Instructions`
FROM `rfq_operations`
LEFT JOIN `workcenter`
ON `rfq_operations`.`Work Center`=`workcenter`.`RN`
WHERE `rfq_operations`.`RFQ Line`=?
ORDER BY `rfq_operations`.`Line Order`
答案 0 :(得分:1)
运行select
查询,然后将结果插入到最终表中。所以,你只得到一个价值。在select
期间,您无法看到对表格的更改。
无论如何,你可以用变量做你想做的事。您的查询有点复杂,但这是一个想法:
insert into router(col1, . . .)
select (@rn := @rn + 1), . . .
from . . . cross join
(select @rn := coalesce(max(`Line Order`), 0) from router) vars;
这会将@rn
变量初始化为最大值。然后它为子查询中的每一行递增它。
那就是说,正确的做法是为此设置一个自动递增键。只需将Line Order
定义为自动递增主键,数据库就会为您增加值。