gpt4 book ai didi

mysql - 如何创建一个表,列出一个表中的所有名称并统计该名称在另一个表中出现的次数?

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

我必须创建一个名为 vecesCarcel 的表,每当我插入名称时,它都会自动添加另一个单元格,其中包含该名称在另一个表中出现的次数。到目前为止,我已经尝试过触发此操作,但没有结果:

USE lordfarquaad;

CREATE TABLE IF NOT EXISTS vecesCarcel(
nombrePersonaje VARCHAR(10),
veces INTEGER(5) UNSIGNED)
ENGINE=InnoDB;

ALTER TABLE vecesCarcel
ADD CONSTRAINT vecesCarcelFK1 FOREIGN KEY(nombrePersonaje)
REFERENCES personajes(nombrePersonaje)
ON DELETE CASCADE ON UPDATE CASCADE;


USE lordfarquaad;
DELIMITER $$


CREATE PROCEDURE checkvecescarcel(IN nombre VARCHAR(10),OUT veces INT(5))
BEGIN
SET veces=(SELECT COUNT(*) FROM historiales WHERE nombrePersonaje=nombre);
END
$$


CREATE TRIGGER vecesCarcel_Insert BEFORE INSERT ON vecesCarcel FOR EACH ROW
BEGIN
CALL checkvecescarcel(NEW.nombrePersonaje,NEW.veces);
END;
$$

最佳答案

如果你想使用触发器,你必须在触发器内设置new.veces-value:

CREATE TRIGGER vecesCarcel_Insert BEFORE INSERT ON vecesCarcel FOR EACH ROW
SET new.veces=(SELECT COUNT(*) FROM historiales
WHERE nombrePersonaje=NEW.nombrePersonaje);

您可能也想创建一个 on update 触发器(相同的代码,因此您也可以将 select count(*)... 放入函数中,然后使用set new.veces = myfnct(new.nombrepersonaje))。

但请记住,如果您更改表 historiales 中的任何内容(例如,使用列表中的名称添加另一个条目),您的计数不会自行更新。因此,根据您的设置,以及您的 historiales 表是否可以更改,或者您只是想尝试不同的方法,您可以尝试 View :

create view vecesCarcelView as
select nombrePersonaje,
(select count(*)
from historiales
where vecesCarcel.nombrePersonaje=historiales.nombrePersonaje) as veces
from vecesCarcel;

(如果您不太关心顺序,您也可以使用 left joingroup by 来完成此操作;实际上您可以使用查看整个personajes表以显示所有已知名称的计数。)

关于mysql - 如何创建一个表,列出一个表中的所有名称并统计该名称在另一个表中出现的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37467774/

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