SQLite更新,在多列上使用'in'表达式

时间:2013-10-17 07:34:37

标签: sqlite sql-update

以下表格是用来说明我遇到问题的案例:

master: code | ord
sub: code | status

我想在连接中使用'in'表达式更新'sub'中行的子集中的字段,如:

create table master (code text, ord integer);
insert into master (code, ord) values
    ('111', 4),
    ('222', 3),
    ('333', 1),
    ('444', 2),
    ('555', 0),
    ('666', 5);

create table sub (code text, status char default 'a');
insert into sub (code) values
    ('111'),
    ('222'),
    ('333'),
    ('444'),
    ('555'),
    ('666');

update sub set status='b' where code in (select sub.code from sub inner join master 
    on sub.code=master.code where sub.status='a' order by master.ord limit 3);

所以上面似乎工作正常,但我真正想要的是对连接在两列上的表应用相同的操作,如:

create table master (code1 text, code2 text, ord integer);
insert into master (code1, code2, ord) values
    ('111', 'one', 4),
    ('222', 'two', 3),
    ('333', 'three', 1),
    ('444', 'four', 2),
    ('555', 'five', 0),
    ('666', 'six', 5);

create table sub (code1 text, code2 text, status char default 'a');
insert into sub (code1, code2) values
    ('111', 'one'),
    ('222', 'two'),
    ('333', 'three'),
    ('444', 'four'),
    ('555', 'five'),
    ('666', 'six');

update sub set status='b' where code1, code2 in (select 
    sub.code1, sub.code2 from sub inner join master on sub.code1=master.code1 and 
    sub.code2=master.code2 where sub.status='a' order by master.ord limit 3);

>>>
Error: near ",": syntax error

如何执行此操作?

1 个答案:

答案 0 :(得分:0)

您不能将多个列(元组)与IN一起使用。

您可以使用ROWID代替:

update sub set status='b' where ROWID in (
    select sub.ROWID from sub inner join master on sub.code1=master.code1 and 
    sub.code2=master.code2 where sub.status='a' order by master.ord limit 3
 );