我有一个MYSQL表,其中两个字段叫做Rate_per_unit和Cost。首先,我希望字段Rate_per_unit从另一个名为SHD_TEACHER的表中填充自己,然后我希望字段COST也从SHD_TEACHER中的RATE填充自己并乘以UNITS。
我有以下代码,它给了我一个错误:
CREATE TRIGGER RATE_PER_UNIT_1
BEFORE INSERT ON SHD_SCHEDULE
FOR EACH ROW
SET NEW.RATE_PER_UNIT =
(
SELECT RATE
FROM SHD_TEACHER
WHERE TEACHERID = NEW.TEACHER_ID
LIMIT 1
)
SET NEW.COST = (
SELECT RATE
FROM SHD_TEACHER
WHERE TEACHERID = NEW.TEACHER_ID
) * UNITS
请帮忙吗?
感谢
答案 0 :(得分:0)
使用您的语法,我希望delimiter
语句和begin
/ end
块。所以,试试这个:
DELIMITER $$
CREATE TRIGGER RATE_PER_UNIT_1
BEFORE INSERT ON SHD_SCHEDULE
FOR EACH ROW
BEGIN
SET NEW.RATE_PER_UNIT =
(
SELECT RATE
FROM SHD_TEACHER t
WHERE t.TEACHERID = NEW.TEACHER_ID
LIMIT 1
)
SET NEW.COST = (
SELECT t.RATE
FROM SHD_TEACHER t
WHERE t.TEACHERID = NEW.TEACHER_ID
) * NEW.UNITS
END $$
DELIMITER ;
第一个子查询中有limit 1
,表明可能存在多个匹配项。如果是这样,您将在第二个中获得运行时错误。此外,UNITS
只是一个人在那里闲逛。我以为它在NEW
记录中。
这是另一种写这个的方法:
DELIMITER $$
CREATE TRIGGER RATE_PER_UNIT_1
BEFORE INSERT ON SHD_SCHEDULE
FOR EACH ROW
BEGIN
SELECT NEW.RATE_PER_UNIT := t.RATE, NEW.COST := t.RATE * NEW.UNITS
FROM (SELECT t.*
FROM SHD_TEACHER t
WHERE t.TEACHERID = NEW.TEACHER_ID
LIMIT 1
) t
END $$
DELIMITER ;