正如错误消息所说,您无法使用调用表进行更新,但您可以通过制作临时表来规避它
-- Table1
CREATE TABLE Table1 (id INT,session VARCHAR(50), value1 VARCHAR(50),
value2 VARCHAR(50),value3 VARCHAR(50),status VARCHAR(50));
INSERT INTO Table1 (id,session,value1,value2,value3,status)
VALUES
(1,1,1,2,3,'inactive'),
(1,2,1,2,3,'inactive'),
(2,1,1,3,4,'inactive'),
(2,2,2,3,4,'inactive'),
(3,1,2,3,2,'active'),
(3,2,2,3,4,'inactive');
select * from Table1
✓
✓
编号 |会议 |值1 |值2 |价值3 |地位
-: | :-------- | :----- | :----- | :----- | :--------
1 | 1 | 1 | 2 | 3 |不活跃
1 | 2 | 1 | 2 | 3 |不活跃
2 | 1 | 1 | 3 | 4 |不活跃
2 | 2 | 2 | 3 | 4 |不活跃
3 | 1 | 2 | 3 | 2 |积极的
3 | 2 | 2 | 3 | 4 |不活跃
-- Table2
CREATE TABLE Table2 (value VARCHAR(50),status VARCHAR(50),
results varchar(50));
INSERT INTO Table2 (value,status,results)
VALUES
(1,'active','BRK'),
(2,'inactive','GOOG'),
(2,'active','HOG'),
(3,'active','XOM'),
(1,'inactive','INTC'),
(4,'inactive','APPL'),
(3,'active','NKE'),
(2,'inactive','SBUX'),
(1,'inactive','BCE'),
(1,'inactive','S&P'),
(2,'active','FB'),
(5,'inactive','FSLY'),
(1,'inactive','AMZN'),
(2,'inactive','ARKK'),
(3,'inactive','AGEN'),
(4,'inactive','C'),
(3,'inactive','TSLA'),
(2,'active','MSFT');
select * from Table2
✓
✓
价值 |状态 |结果
:---- | :------- | :------
1 |活跃 | BRK
2 |不活跃 |谷歌
2 |活跃 |猪
3 |活跃 | XOM
1 |不活跃 |国际贸易中心
4 |不活跃 |应用程序
3 |活跃 | NKE
2 |不活跃 | SBUX
1 |不活跃 |公元前
1 |不活跃 |标普
2 |活跃 |脸书
5 |不活跃 | FSLY
1 |不活跃 |亚马逊
2 |不活跃 | ARKK
3 |不活跃 |阿根
4 |不活跃 | C
3 |不活跃 |特斯拉
2 |活跃 |微软
-- Table3
CREATE TABLE Table3 (id INT, session VARCHAR(50), results1 VARCHAR(50),
results2 VARCHAR(50),results3 VARCHAR(50));
INSERT INTO Table3 (id, session, results1, results2,results3)
VALUES
(1,1,null,null,null),
(1,2,null,null,null),
(2,1,null,null,null),
(2,2,null,null,null),
(3,1,null,null,null),
(3,2,null,null,null);
select * from Table3
✓
✓
编号 |会议 |结果1 |结果2 |结果3
-: | :-------- | :------- | :------- | :--------
1 | 1 | 空 | 空 | 空
1 | 2 | 空 | 空 | 空
2 | 1 | 空 | 空 | 空
2 | 2 | 空 | 空 | 空
3 | 1 | 空 | 空 | 空
3 | 2 | 空 | 空 | 空
-- View1 (Random conditional on Table1)
CREATE VIEW view1 AS
SELECT Table1.id,Table1.session, (select results from Table2
where (Table1.status = Table2.status
and Table1.value1 = Table2.value)
order by RAND() limit 1) as results1,
(select results from Table2
where (Table1.status = Table2.status
and Table1.value2 = Table2.value)
order by RAND() limit 1) as results2,
(select results from Table2
where (Table1.status = Table2.status
and Table1.value3 = Table2.value)
order by RAND() limit 1) as results3
from Table1;
select * from view1
✓
编号 |会议 |结果1 |结果2 |结果3
-: | :-------- | :------- | :------- | :--------
1 | 1 |亚马逊 |方舟 |阿根
1 | 2 |标准普尔 | SBUX |阿根
2 | 1 |标准普尔 |阿根 |应用程序
2 | 2 | SBUX |阿根 |应用程序
3 | 1 |脸书 | NKE |猪
3 | 2 |方舟 |阿根 |应用程序
-- Trigger
CREATE TRIGGER trigger1
AFTER UPDATE
ON Table1
FOR EACH ROW
BEGIN
UPDATE Table3
INNER JOIN (SELECT * FROM view1) v ON Table3.id = v.id
SET
Table3.results1 = v.results1,
Table3.results2 = v.results2,
Table3.results3 = v.results3
WHERE Table3.id = v.id;
end;
-- Update
UPDATE Table1
SET value1 = 2
WHERE id = 1 and session = 1;
SELECT * FROM Table3;
编号 |会议 |结果1 |结果2 |结果3
-: | :-------- | :------- | :------- | :--------
1 | 1 |方舟 |方舟 |特斯拉
1 | 2 |方舟 |方舟 |特斯拉
2 | 1 |公元前 |特斯拉 | C
2 | 2 |公元前 |特斯拉 | C
3 | 1 |微软 | XOM |猪
3 | 2 |微软 | XOM |猪
db小提琴here