我有三個不同的表:人,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'語法。 –