0

id_sitio実際の値に置き換えると、サブクエリに基づいてフィールドを更新できます。

update sitios
set grado = (
    select count(lin_sit.id_lineamiento) as total
    from lineamientos_sitios lin_sit inner join sitios sit on lin_sit.id_sitio=sit.id_sitio
    where sit.id_sitio=1418
)
where id_sitio=1418;

しかし、ルールを実装するときではありません。

CREATE or replace RULE actualizar_lineamientos_sitios_view AS ON UPDATE TO lineamientos_sitios_view DO INSTEAD (
UPDATE lineamientos_sitios SET id_lineamiento = new.id_lineamiento, id_sitio = new.id_sitio WHERE (lineamientos_sitios.id_lineamiento = old.id_lineamiento AND lineamientos_sitios.id_sitio = old.id_sitio);
update sitios  set grado = (select count(lin_sit.id_lineamiento) as total from lineamientos_sitios lin_sit inner join sitios sit on lin_sit.id_sitio=sit.id_sitio where sit.id_sitio=new.id_sitio) where id_sitio=new.id_sitio;
);

id最初の更新は機能するので関係ないと思います。アップロードしたいレコードからを参照する方法がわかりません。

解決策はありますか?ありがとう!

4

1 に答える 1

1

こんにちはクレイグ(他の誰でも大歓迎です;))

どうもありがとうございました。あなたは私に手がかりを与えましたが、削除ルールに問題があります。最初のルールは正常に機能するため、サブクエリに基づいてフィールド grado をアップロードできます。しかし、calcularGrado2_view ルールは機能しません。

CREATE RULE calcularGrado_view AS ON INSERT TO lineamientos_sitios_view DO INSTEAD (

update sitios  set grado = (select count(lin_sit.id_lineamiento) as total from lineamientos_sitios lin_sit inner join sitios sit on lin_sit.id_sitio=sit.id_sitio where sit.id_sitio=new.id_sitio) where id_sitio=new.id_sitio;

);

CREATE RULE calcularGrado2_view AS ON DELETE TO lineamientos_sitios_view DO INSTEAD (

update sitios  set grado = (select count(lin_sit.id_lineamiento) as total from lineamientos_sitios lin_sit inner join sitios sit on lin_sit.id_sitio=sit.id_sitio where sit.id_sitio=old.id_sitio) where id_sitio=old.id_sitio;

);

ルールのどこが間違っているか知っていますか? ありがとうございました!

于 2013-01-25T02:56:45.453 に答える