我有一個經典的父母 - 子女關係的sqlite:更新多個列一個子查詢
create table tq84_parent (
id int primary key,
avg_val float,
min_val float,
max_val float
);
create table tq84_child (
id_parent int references tq84_parent,
val int
);
這是充滿如下
insert into tq84_parent (id) values(1);
insert into tq84_parent (id) values(2);
insert into tq84_child values (1, 1);
insert into tq84_child values (1, 2);
insert into tq84_child values (1, 3);
insert into tq84_child values (2, 6);
insert into tq84_child values (2, 7);
insert into tq84_child values (2, 8);
insert into tq84_child values (2, 9);
insert into tq84_child values (2, 10);
現在,我想更新tq84_parent
其列avg_val
,min_val
和max_val
反映其子表的相應聚合值。
我可以用這個語句實現這一目標:
update
tq84_parent
set
avg_val = (select avg(val) from tq84_child where id_parent = id),
min_val = (select min(val) from tq84_child where id_parent = id),
max_val = (select max(val) from tq84_child where id_parent = id);
的結果,期望是:
.mode columns
select * from tq84_parent;
1 2.0 1.0 3.0
2 8.0 6.0 10.0
我擔心,但是,這樣的語句的性能不是最優的,因爲記錄數在tq84_parent
和tq84_child
中都增長,因爲幾乎相同的查詢是三次而不是一次。
所以,我想一起去像
update
tq84_parent
set
(
avg_val,
min_val,
max_val
)
= (select
avg(val),
min(val),
max(val)
from
tq84_child
where
id_parent = id
);
不工作。
那麼,有沒有辦法重寫我的查詢?
這是您的實際'tq84_parent'表,還是有更多的列? –
'tq84_parent'中有更多列。如果它有所作爲,我仍然對它的實際'tq84_parent'表有興趣。 –