我有三个表格结构:比赛,团队和团队.锦标赛和小组赛表有一对多的关系,团队和团队有一对多的关系,如下所示.
如何将组合表中的tournament_id的值复制到团队表的group_tournament_id中?
我正在寻找一个答案,这将使用create语句来实现这一点
create table team ( id serial primary key,group_id int references group,group_tournament_id int references group(tournament_id) );
当然这不行,因为为了引用它必须是唯一的东西,在这种情况下,tournament_id不是唯一的
我需要一个标准的方式来将组合中的tourn_id_id的值从组中复制到“team”表的group_tournament_id中,当我将group_id插入到团队表中
编辑:不再需要symfony的回答,只是postgresql会好的
您应该直接使用团队参与锦标赛的参考.使用触发器自动从组中获取适当的引用. (请注意,引用不是必需的,因为您可以随时从查询中的组中获取tournament_id.我认为此引用是为了简化某些查询).
表:
create table tournaments ( tournament_id serial primary key); create table groups ( group_id serial primary key,tournament_id int references tournaments); create table teams ( team_id serial primary key,group_id int references groups,tournament_id int references tournaments);
触发:
create or replace function before_insert_or_update_on_teams() returns trigger language plpgsql as $$ begin new.tournament_id = ( select tournament_id from groups where group_id = new.group_id limit 1); return new; end $$; create trigger before_insert_or_update_on_teams before insert or update on teams for each row execute procedure before_insert_or_update_on_teams();
测试:
insert into tournaments values (default),(default); insert into groups values (default,2); insert into teams values (default,1,null); select * from teams; team_id | group_id | tournament_id ---------+----------+--------------- 1 | 1 | 2 (1 row)
原文地址:https://www.jb51.cc/postgresql/192536.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。