我正在尝试创建一个触发器,当在其他关系中添加元组时,该触发器会自动将元组插入到关系中。
这是我的代码:
DROP TRIGGER IF EXISTS AdicionaAmigos;
CREATE TRIGGER AdicionaAmigos
AFTER INSERT ON Estudante
FOR EACH ROW
BEGIN
INSERT INTO Amizade
VALUES
(
SELECT New.ID, Estudante.ID
FROM Estudante
WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
);
INSERT INTO Amizade
VALUES
(
SELECT Estudante.ID, New.ID
FROM Estudante
WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
);
END;
这是我收到的错误:
Error: near line 101: near "SELECT": syntax error
第101行=创建触发器AdicionaAmigos
SQLITE版本:3.17
答案 0 :(得分:1)
您的INSERT INTO
语句中存在语法错误。
您必须删除VALUES
子句并保留INSERT INTO...SELECT...
:
DROP TRIGGER IF EXISTS AdicionaAmigos;
CREATE TRIGGER AdicionaAmigos
AFTER INSERT ON Estudante
FOR EACH ROW
BEGIN
INSERT INTO Amizade
SELECT New.ID, Estudante.ID
FROM Estudante
WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;
INSERT INTO Amizade
SELECT Estudante.ID, New.ID
FROM Estudante
WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;
END;
您可以找到有关INSERT INTO
语法here的更多信息。
另外,单独的INSERT INTO
语句可以与UNION ALL
合并为1:
INSERT INTO Amizade
SELECT New.ID, Estudante.ID
FROM Estudante
WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
UNION ALL
SELECT Estudante.ID, New.ID
FROM Estudante
WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;