在SQLite中,当PK为unqiue但where子句相同时,如何更新表?

在SQLite中,当PK为unqiue但where子句相同时,如何更新表?,sql,sqlite,sql-update,Sql,Sqlite,Sql Update,我在SQLite中提供了下表 CREATE TABLE Items ( PK INTEGER PRIMARY KEY AUTOINCREMENT, ItemId VARCHAR, Sold VARCHAR); 我有两行数据,PK是唯一的,ItemId是相同的。运行Insert语句时,将插入具有相同ItemId的两行 1,16,22 2、16、19 要运行Update语句,我受到以下事实的限制:我只被传递ItemId,并且我需要按升序更新两行。虽然我真的认识到这是一个可怕的数据模型,但这正是我所

我在SQLite中提供了下表

CREATE TABLE Items ( PK INTEGER PRIMARY KEY AUTOINCREMENT, ItemId VARCHAR, Sold VARCHAR);
我有两行数据,PK是唯一的,ItemId是相同的。运行Insert语句时,将插入具有相同ItemId的两行

1,16,22

2、16、19

要运行Update语句,我受到以下事实的限制:我只被传递ItemId,并且我需要按升序更新两行。虽然我真的认识到这是一个可怕的数据模型,但这正是我所面对的,因为我无法更改表结构

当我有重复的ItemId值,但PK是唯一的时,有没有办法用更新的销售值更新每一行

在这一点上,我尝试了以下内容,但我仍然使用第二个update语句的销售值(在下面的例子中)更新了两行,值为20

UPDATE Items SET Sold = 23  WHERE ItemId = 16 AND ROWID = ( Select rowid From Items Order By ROWID Limit 1);
UPDATE Items SET Sold = 20  WHERE ItemId = 16 AND ROWID = ( Select rowid From Items Order By ROWID Limit 1);
谢谢。

插入或替换语法对此很有用

insert or replace into items(pk, itemid, sold)
select pk, itemid, 23 from items where itemid = 16 limit 1;

insert or replace into items(pk, itemid, sold)
select pk, itemid, 20 from items where itemid = 16 limit 1;
insert或replace语法对此很有用

insert or replace into items(pk, itemid, sold)
select pk, itemid, 23 from items where itemid = 16 limit 1;

insert or replace into items(pk, itemid, sold)
select pk, itemid, 20 from items where itemid = 16 limit 1;

我想问题是,如果您只有ItemId,那么如何知道要更新哪个ROWID?您可以尝试以下方法:

update Items item1 set Sold = 23 where ItemId = 16 and not exists(select rowid from Items where item1.rowid < rowid)

update Items item1 set Sold = 20 where ItemId = 16 and not exists(select rowid from Items where item1.rowid > rowid)

虽然如果给定的ItemId有两行以上,这将不会太有用

我想问题是,如果只有ItemId,您如何知道要更新哪个ROWID?您可以尝试以下方法:

update Items item1 set Sold = 23 where ItemId = 16 and not exists(select rowid from Items where item1.rowid < rowid)

update Items item1 set Sold = 20 where ItemId = 16 and not exists(select rowid from Items where item1.rowid > rowid)

虽然如果给定的ItemId有两行以上,这将不会太有用

企业到底希望看到什么?他们如何区分这两种销售关系?在这种情况下,升序意味着什么?主键的升序?你的问题是严格限制在两行,这很容易,还是必须处理任意数量的行?我的问题每次只限于两行。在业务端,他们希望看到相同ItemId的两行,因为卖出的值只是按原样到达。因此,如果第一次售出的金额为23,第二次售出的金额为20,则按升序插入,23然后20-数据到达的顺序。第三方每次给我两行相同的ItemId,两个16,两个17,两个18,等等。这样我就可以有两个16,售价是23,20。我可以有两个17,售价32,48。。。以此类推。企业到底希望看到什么?他们如何区分这两种销售关系?在这种情况下,升序意味着什么?主键的升序?你的问题是严格限制在两行,这很容易,还是必须处理任意数量的行?我的问题每次只限于两行。在业务端,他们希望看到相同ItemId的两行,因为卖出的值只是按原样到达。因此,如果第一次售出的金额为23,第二次售出的金额为20,则按升序插入,23然后20-数据到达的顺序。第三方每次给我两行相同的ItemId,两个16,两个17,两个18,等等。这样我就可以有两个16,售价是23,20。我可以有两个17,售价32,48。。。等等