eu tenho uma mesa
create table w (
id integer primary key,
--
min_xyz double,
max_xyz double,
min_abc double,
max_abc double
);
com os valores min*
e max*
atualmente sendo null
.
eu tenho outra mesa
create table n (
id integer primary key,
---
xyz float,
abc float
);
Existe uma n:n
relação entre essas tabelas:
create table n_in_w (
n_id integer not null references n,
w_id integer not null references w
--- further attributes
);
Agora, gostaria de preencher os atributos min*
e com os respectivos valores na conexão via . O seguinte fariamax*
w
n
n_in_w
update w set
min_xyz = (select min(xyz) from n, n_in_w where n.id = n_in_w.n_id and n_in_w.w_id = w.id),
max_xyz = (select max(xyz) from n, n_in_w where n.id = n_in_w.n_id and n_in_w.w_id = w.id),
min_abc = (select min(abc) from n, n_in_w where n.id = n_in_w.n_id and n_in_w.w_id = w.id),
max_abc = (select max(abc) from n, n_in_w where n.id = n_in_w.n_id and n_in_w.w_id = w.id);
mas temo que o desempenho desta consulta sql não seja ideal, pois tem que verificar n
4 vezes para cada n.id
;
Idealmente, estou procurando algo como
update (
select
w.id,
/*----*/
w.min_xyz,
w.max_xyz,
w.min_abc,
w.max_abc,
/*-----*/
min(n.xyz) min_n_xyz,
max(n.xyz) max_n_xyz,
min(n.abc) min_n_abc,
max(n.abc) max_n_abc
from
w, n_in_w, n
where
w.id = n_in_w.w_id and
n.id = n_in_w.n_id
) i
set
i.min_xyz = i.min_n_xyz,
i.max_xyz = i.max_n_xyz,
i.min_abc = i.min_n_abc,
i.max_abc = i.max_n_abc;
(ou algo semelhante), mas parece que não é possível com o mysql.
Sintaxe do MySQL: