我有三个不同的表:人,person_pet和PETSQL更新查询填充从第一行只有第一个值
create table person (
id integer primary key,
name text
);
create table person_pet (
person_id integer,
pet_id integer primary key
);
create table pet (
id integer primary key,
breed text,
owner integer
);
在那之后,我插入一些值:
insert into person (id, name)
values (0, "Name1"), (1, "Name2"), (2, "Name3");
insert into person_pet (person_id, pet_id)
values (0,1), (1,0), (2,3), (1,2);
insert into pet (id, breed, owner)
values (0, "PetA", null), (1, "PetB", null), (2, "PetC", null), (3, "PetD", null);
我想将表pet中owner列的数据更新为person_pet表中显示的所有者的实际id。也就是说,我希望得到以下结果:
PET表
id breed owner
0 PetA 1
1 PetB 0
2 PetC 1
3 PetD 2
我试图用一个选择的子查询这个SQL查询:
update pet set owner = (
select person.id
from person, person_pet, pet
where person.id = person_pet.person_id and
person_pet.pet_id = pet.id
);
这产生这个输出(在只有ID填充一个所有者):
PET表
id breed owner
0 PetA 1
1 PetB 1
2 PetC 1
3 PetD 1
如果我运行它自己的子查询,
select person.id
from person, person_pet, pet
where person.id = person_pet.person_id and
person_pet.pet_id = pet.id;
,我希望出现的结果:
PET表
id breed owner
0 PetA 1
1 PetB 0
2 PetC 1
3 PetD 2
但我不使用时,设法让这更新命令。
哪个'DBMS'?因为对于每个DBMS,JOIN语法的UPDATE不同。 – Arulkumar
@Arulkumar,它是SQLite3。 –
我知道的唯一方法是在'pet'表中替换'值',同时通过'select'查询插入新数据,而不是使用'values'语法。 –