使用触发器时 "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
好的,所以现在我正在创建一个触发器,viewsCounter
从 brands
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 如果它可能有帮助:
我正在为一个社交网络实现一个数据库,这个社交网络一定有添加,为此我实现了一个名为 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 |
好的,所以现在我正在创建一个触发器,viewsCounter
从 brands
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 如果它可能有帮助: