SQLite 基于字段值的简单插入
SQLite simple insert based on a field value
SQL(SQL站点)中的一个简单问题。
我有一个这样的tabletab
id | amount | descr
---------------------------
bolt | 8 | "ok"
screw | 20 | "ok"
screw | 1 | "ok"
对于 id
的每个不同值,我希望插入一个新行,其中相应的最大值 amount
增加 1 并使 description
“增加”。
id | amount | descr
---------------------------
bolt | 8 | "ok"
bolt | 9 | "incremented"
screw | 20 | "ok"
screw | 1 | "ok"
screw | 21 | "incremented"
这是我的“尝试”(大错特错,最好还是省略)
INSERT INTO tab VALUES (
myid,
SELECT 1 + MAX(amount) FROM tab WHERE tab.id = myid,
"incremented" )
WHERE myid = tab.id -- pretends to "foreach" id in tab
似乎是一个简单的问题,但恐怕我在 SQL (SQLite) 上太新手了(除了普通老厚)而不必求助于“阅读本书”来解决它: -O
你很接近。您想要一个聚合查询:
insert into tab (myid, amount, descr)
select myid, max(amount) + 1, 'incremented'
from tab
group by myid;
SQL(SQL站点)中的一个简单问题。
我有一个这样的tabletab
id | amount | descr
---------------------------
bolt | 8 | "ok"
screw | 20 | "ok"
screw | 1 | "ok"
对于 id
的每个不同值,我希望插入一个新行,其中相应的最大值 amount
增加 1 并使 description
“增加”。
id | amount | descr
---------------------------
bolt | 8 | "ok"
bolt | 9 | "incremented"
screw | 20 | "ok"
screw | 1 | "ok"
screw | 21 | "incremented"
这是我的“尝试”(大错特错,最好还是省略)
INSERT INTO tab VALUES (
myid,
SELECT 1 + MAX(amount) FROM tab WHERE tab.id = myid,
"incremented" )
WHERE myid = tab.id -- pretends to "foreach" id in tab
似乎是一个简单的问题,但恐怕我在 SQL (SQLite) 上太新手了(除了普通老厚)而不必求助于“阅读本书”来解决它: -O
你很接近。您想要一个聚合查询:
insert into tab (myid, amount, descr)
select myid, max(amount) + 1, 'incremented'
from tab
group by myid;