Trigger

為什麼 INSERT AFTER Trigger 不添加所有結果?

  • July 18, 2013

我正在為 db-class.org 做練習,我們必須在其中編寫一個觸發器,讓被命名為“Friendly”的新學生自動像同年級的其他人一樣。也就是說,在觸發器執行之後,我們應該在 Likes 表中為每個與“Friendly”同年級的高中生 A 提供 (‘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;

我懷疑我的 INSERT 查詢有問題,因為 SELECT 單獨返回所有 ID。那麼如何確保它插入所有具有匹配成績的 ID?

在大多數平台上insert,如果您的子選擇返回多於一行,而不是僅插入返回的“第一”行(並且“第一”在沒有order by子句的情況下未定義),您將拋出錯誤。

你可能追求的是insert這樣的:

INSERT Into Likes 
SELECT New.ID, ID 
FROM Highschooler 
WHERE Grade = New.Grade and ID<>New.ID;

引用自:https://dba.stackexchange.com/questions/8045