为什么 INSERT AFTER Trigger 不添加所有结果?

Ivo*_*pse 5 sqlite trigger

我正在为 db-class.org 编写练习,我们必须编写一个触发器,使新学生自动像同年级的其他人一样被命名为“友好”。也就是说,在触发器运行后,对于与“Friendly”同年级的所有其他高中生 A,我们应该在 Likes 表中包含 ('Friendly', A)。

这是在以下数据集的sqlite 中完成的。现在我的触发器起作用了,但它只添加了一个“友好”喜欢的人,而不是所有人(具有相同等级的人)。

这是我的触发器:

CREATE Trigger Q1
After Insert on Highschooler
For Each Row
When New.Name = 'Friendly'
Begin
    INSERT Into Likes Values (New.ID, (
    SELECT Highschooler.ID FROM Highschooler
    WHERE Highschooler.Grade = New.Grade));
End;
Run Code Online (Sandbox Code Playgroud)

我怀疑我的 INSERT 查询有问题,因为孤立地 SELECT 返回所有 ID。那么我如何确保它插入所有具有匹配成绩的 ID?

Jac*_*las 11

在大多数平台上,insert如果您的子选择返回多行,而不是仅插入返回的“第一”行(并且“第一”未定义没有order by子句),则会引发错误。

你可能追求的是insert这样的:

INSERT Into Likes 
SELECT New.ID, ID 
FROM Highschooler 
WHERE Grade = New.Grade and ID<>New.ID;
Run Code Online (Sandbox Code Playgroud)