我正在建模一个游戏,其中每个玩家都有另一个玩家分配给他们,他们必须"猎杀"谁。
我在postgresql
中有以下表create table player(
id int primary key,
id_hunt int not null references player(id),
name varchar(30) not null,
email varchar(120) not null unique);
并且想知道如何显示每个玩家的名字和他们的id以及他们必须追捕的玩家和他们的id。
create table player(
id int primary key,
id_hunt int references player(id),
name varchar(30) not null,
email varchar(120) not null unique);
insert into player values (1, null , 'test', 'email');
insert into player values (3, 1 , 'test3', 'email_3');
update player set id_hunt = 3 where id = 1;
select * from player ;
id | id_hunt | name | email
----+---------+-------+---------
3 | 1 | test3 | email_3
1 | 3 | test | email
select pred.id, pred.name AS pred, prey.id, prey.name AS prey from player as pred join player as prey on pred.id_hunt = prey.id;
id | pred | id | prey
----+-------+----+-------
3 | test3 | 1 | test
1 | test | 3 | test3
我把NOT NULL
改成了id_hunt
,这样我就可以进入第一个玩家。当你输入没有"猎物"的玩家时,这将是一个问题。
无论如何,一般的想法是通过混叠表来实现自连接。