使用触发器时 "field list" 中的未知列 "column name"

Unknown column "column name" in "field list" while using triggers

我正在为一个社交网络实现一个数据库,这个社交网络一定有添加,为此我实现了一个名为 brands 的 table,这个 table 有一个 viewsCounter 列,每次您点击一个品牌的主页时,viewsCounter 已经存在的视图增加 1。

这是brands table:

CREATE TABLE brands (
  brandId int NOT NULL,
  brandName varchar(45) NOT NULL,
  viewsCounter int DEFAULT NULL,
  PRIMARY KEY (brandId));

brands table 看起来像这样:

brandId brandName viewsCounter
0 adidas 0
1 apple 2
2 cocacola 6

现在,还有一个 profits table,这个 table 有一个 moneyReceived 列和一个 profitDate 列,每 5 次浏览 viewsCounter 与该特定品牌关联的 moneyReceived 列必须增加 1,并且 profitDate 必须更新为获利的特定日期。

这是 profits table:

CREATE TABLE profits (
  profitId int NOT NULL,
  moneyReceived int NOT NULL,
  profitDate date DEFAULT NULL,
  brandId_profits int DEFAULT NULL,
  PRIMARY KEY (profitId),
  KEY fk_profits_brands_idx (brandId_profits),
  CONSTRAINT fk_profits_brands
  FOREIGN KEY (brandId_profits)
  REFERENCES brands (brandId)
  ON DELETE RESTRICT ON UPDATE RESTRICT);   

profits table 看起来像这样:

profitId moneyReceived profitDate brandId_profits
0 0 0
1 0 1
2 0 2

好的,所以现在我正在创建一个触发器,viewsCounterbrands table 更新 每 5 次查看profits table 通过将与该特定品牌关联的 moneyReceived 列增加 1 并更新 profitDate.

中的日期

这是我制作的触发代码:

CREATE TRIGGER trigger_brands_profits
AFTER UPDATE on brands
FOR EACH ROW UPDATE profits
SET moneyReceived = moneyReceived+1, profitDate=now()
WHERE (brands.brandId = brandId_profits) and (brands.viewsCounter % 5 = 0);

但是在我实施触发器并尝试向 viewsCounter 添加任意数量的视图后,我得到 ERROR 1054: Unknown column 'brands.brandId' in 'where clause'

我已经尝试了很多尝试声明变量的组合,但仍然不起作用。

在您的触发器中,您试图更新利润 table,但您引用了品牌 table(brands.brandId 和 brands.viewsCounte)中的列,但没有加入table.

我不完全确定您使用的 sql 是哪个版本,但是您的触发器的更新语句需要与品牌 table 的 JOIN 相关联;像这样:

UPDATE profits
SET moneyReceived = moneyReceived+1, profitDate=GETDATE()
FROM profits
JOIN brands ON profits.brandId_profits = brands.brandid
WHERE (brands.brandId = brandId_profits) and (brands.viewsCounter % 5 = 0);

更新: 抱歉 - 看起来您可能正在使用 mysql?

这是 mysql ...

的带有 JOIN 语句的更新
UPDATE profits
JOIN brands ON brandId = brandId_profits
SET moneyReceived = moneyReceived+1, profitDate=now()
WHERE (brands.brandId = brandId_profits) AND (brands.viewsCounter % 5 = 0);

尝试获取插入时的值,并在update中替换,如下图示例

顺便说一句,这里是 link 如果它可能有帮助:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/4c92497c-b735-43e3-989e-1c0e4c9a483c/trigger-fou-update-solo-actualiza-un-registro?forum=transactsql