我正在为 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)
归档时间: |
|
查看次数: |
3419 次 |
最近记录: |