无法弄清楚如何制作子查询

时间:2018-01-24 11:29:50

标签: sql database subquery

        CREATE TABLE TBLTeams
(
    teamnm        varchar(30) NOT NULL,
    teamid          varchar(10),
    rondenm         varchar(10) 
    primary key(teamnm)
)

CREATE TABLE TBLWedstrijd
(
    thuisteamnm        varchar(30) NOT NULL,
    uitteamnm            varchar(30) NOT NULL,
    wedstrijdid            varchar(10) 
    primary key(wedstrijdid)
)

alter table TBLWedstrijd add foreign key (thuisteamnm) references TBLTeams(teamnm)
alter table TBLWedstrijd add foreign key (uitteamnm) references TBLTeams(teamnm)

CREATE TABLE TBLUitslag
(
    thuisteamnm        varchar(30) NOT NULL,
    uitteamnm            varchar(30) NOT NULL,
    wedstrijdid            varchar(10) NOT NULL,
    uitteampunt            int,
    thuisteampunt        int 
    primary key(thuisteamnm)
)

alter table TBLUitslag add foreign key (wedstrijdid) references TBLWedstrijd(wedstrijdid)

如果我在TBLTeams中更新teamnm,我如何更新TBLWedstrijd uitteamnm中的参考。我知道它是一个子查询,但我真的不知道如何。

1 个答案:

答案 0 :(得分:0)

你有点不对劲。如果您要更改团队名称,则不应将其用作密钥(因为这会破坏所有引用)。

您希望从TBLWedstrijd引用其ID,而不是使用其名称。

所以你的陈述将成为:

CREATE TABLE TBLWedstrijd
(
    wedstrijdid        varchar(10),
    thuisteamid        varchar(10) NOT NULL,
    uitteamid          varchar(10) NOT NULL,
    primary key(wedstrijdid)
)

alter table TBLWedstrijd add foreign key (thuisteamid) references TBLTeams(teamid)
alter table TBLWedstrijd add foreign key (uitteamid) references TBLTeams(teamid)

同样适用于你的桌子TBLUitslag,你应该只引用TBLWedstrijd,因为那个已经掌握了有关哪些球队正在比赛的信息。更不用说,无论如何,得分几乎都是游戏的一部分,所以将它们分成2个表并没有多大意义。这就变成了:

CREATE TABLE TBLWedstrijd
    (
        wedstrijdid        varchar(10),
        thuisteamid        varchar(10) NOT NULL,
        uitteamid          varchar(10) NOT NULL,
        uitteampunt        int,
        thuisteampunt      int 
        primary key(wedstrijdid)
    )

这称为"表格规范化"如果你想谷歌一些东西了解更多信息。