2013-09-19 2 views
0

У меня есть два отношения я работаю с Highschooler (ID, имя, класс) и любит (ID1, ID2)Referencing атрибутов со вставкой триггеров

Я хочу сделать триггер вставки, которая вставляет записи в Понравилось отношение.

Когда я вставляю новый Highschooler в отношение Highschooler, я хочу, чтобы мой триггер insert вставлял записи в симпатии, и в основном новый highschooler любит всех в одном классе.

То, что я хочу, это как-то ниже:

create trigger R1 
after insert on Highschooler 
for each row 
when (Old.grade = New.grade) 
begin 
    insert into Likes values(New.ID, Old.ID)); 
end; 

однако, со вставкой вызывает Старая ссылка не действительна! так как я могу ссылаться на старые атрибуты?

@Bill Gregg: Спасибо за подсказку и объяснение. Так вот что вы предлагаете?

create trigger R1 
after insert on Highschooler 
for each row 
begin 
    insert into Likes values(hs.ID, old.ID)); 
    select(hs.ID, old.ID from Highschooler hs, Highschooler old 
    where hs.grade = old.grade and hs.ID <> old.ID 
end; 

Я запустил его на своей СУБД, и он не выполняется. Я подозреваю, что есть некоторая проблема с наличием инструкции select после вставки.

+0

Я использую SQLite, кстати. – SeekingAlpha

+0

Вы не можете смешивать свои методы вставки. Вы не можете «вставлять значения» и «вставлять select». Я думаю, что мой код будет работать как написанный (предполагая, что вы поместили его в действие «для каждой строки», и это действительно действительный синтаксис SqlLite. –

ответ

1

В триггере ввода нет такой вещи, как «Старый», поскольку старая строка не существует. Вы только вставляете новую строку.

Я думаю, что вы хотите

for each row 

insert into Likes (FirstID,SecondID) 
select hs.id, new.id 
from HighShooler hs 
where hs.grade = new.grade 
and hs.id != new.id 
+0

вам не понадобится соединение между двумя отношениями высокого уровня? Highschooler hs, Highschooler old? – SeekingAlpha

+0

Вы получаете новый highschooler в своем списке для каждой строки. –

Смежные вопросы