gpt4 book ai didi

mysql - 如何从第二个表(MYSQL)的更新中获取表值

转载 作者:行者123 更新时间:2023-11-29 20:07:28 25 4
gpt4 key购买 nike

我对 MYSQL 相当陌生,并且在使用触发器方面遇到了困难。我正在使用 PHPmyAdmin 并使用 InnoDB 作为存储引擎。

我的数据库旨在构建职业体育联盟。我有团队和分区的表格,我想设置该表格,以便可以根据该分区中团队的记录来计算该分区的记录。这是我创建团队表的 SQL:

    CREATE TABLE `cs340_neffj`.`teams2` ( `teamID` VARCHAR(3) NOT 
NULL ,`teamName` VARCHAR(20) NOT NULL , `teamWins` INT(3) NOT NULL ,
`teamLoss` INT(3) NOT NULL , `divID` INT(1) NOT NULL ) ENGINE = InnoDB;

这里是分区表:

    CREATE TABLE `cs340_neffj`.`divisions2` ( `divID` INT(1) NOT NULL , 
`divName` VARCHAR(20) NOT NULL , `divLeader` VARCHAR(20) NULL ,
`divWins` INT(3) NOT NULL , `divLoss` INT(3) NOT NULL , `leagueID` INT
(1) NOT NULL ) ENGINE = InnoDB;

所以我想做的是,每次更新 'teams2' 中的一行时,将特定分区中每个团队的所有胜利和损失相加,并将其插入到 'divisions2' 的 divWins 和 divLoss 列中。在“teams2”中,divID 是引用“divisions2”的外键。这是我对触发器的尝试。

   INSERT INTO divisions2 (divWins)
SELECT SUM(teamWins)
FROM teams2
WHERE teams2.divID = divisions2.divID

当我尝试更新“teams2”时,出现此错误:“#1054,“where 子句”中的未知列“divisions2.divID”。

那么为什么数据库找不到这一列呢?是因为divID没有值吗?

最佳答案

假设该记录已存在于表division2

您应该使用更新而不是插入

UPDATE divisions2 
SET divWins = SUM(teams2.teamWins)
FROM teams2
INNER JOIN division2 ON teams2.divID = divisions2.divID

update 命令将更新 division2inner join详细信息可以引用here ,简单来说就是选择所有符合条件的数据

正如我的评论所述,我认为此类数据应该使用 View 而不是触发器。

查看:

CREATE VIEW view_name AS
SELECT division2.`divID`, sum(teams2.`teamWins`) as teamWins
FROM teams2
INNER JOIN division2 on teams2.divID = divisions2.divID

因此,每次您选择 View 时,它都会同时计算teamWins

关于mysql - 如何从第二个表(MYSQL)的更新中获取表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40297545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com