问题描述: 想要插入的数据是根据表中数据计算得来,想要直接一条语句插入完成。
解决思路: 利用insert和select结合
解决方案:
INSERT INTO branch_relation(descendant_id,ancestor_id,distance,gmt_create,gmt_modified)
SELECT #{id}, ancestor_id, distance + 1, current_timestamp(), current_timestamp() FROM branch_relation
WHERE descendant_id = #{father}
注意点: select与values连用时只能横向不能纵向,即values里使用select时,查询出来的结果只当作一个字段的值,而不是多列待插入的值。
错误写法:
INSERT INTO branch_relation(descendant_id,ancestor_id,distance,gmt_create,gmt_modified)
values ( (SELECT ancestor_id, distance + 1, current_timestamp(), current_timestamp() FROM branch_relation
WHERE descendant_id = 100),
(1, 1, 0, current_timestamp(), current_timestamp())
)
正确写法:
INSERT INTO branch_relation(descendant_id,ancestor_id,distance,gmt_create,gmt_modified)
values ( (SELECT ancestor_id FROM branch_relation WHERE descendant_id = 100) , 1, 0, current_timestamp(), current_timestamp() )