我目前正在經歷試圖瞭解函數和觸發器的成長之痛。我試圖從我正在閱讀的書中解決問題,但我不知道如何做某些部分。觸發器和函數的麻煩
使用該表
create table movies (
id integer primary key,
title varchar(255) not null,
year integer
);
insert into movies values (1, 'The Croods', 2013);
insert into movies values (2, 'Now You See Me', 2013);
insert into movies values (3, 'Argo', 2012);
insert into movies values (4, 'Jurassic World', 2015);
create table discs (
id integer primary key,
movie_id integer not null references movies(id),
type_id integer references disc_types(id),
price decimal(10,2),
available boolean
);
insert into discs values (1, 1, 1, 1.59, 't');
insert into discs values (2, 1, 1, 1.59, 'f');
insert into discs values (3, 1, 2, 2.99, 'f');
insert into discs values (4, 2, 1, 1.29, 't');
insert into discs values (5, 2, 1, 1.29, 't');
insert into discs values (6, 2, 2, 2.99, 't');
insert into discs values (7, 3, 2, 2.59, 't');
insert into discs values (8, 3, 2, 2.59, 't');
create table customers (
id integer primary key,
name varchar(255),
email varchar(255)
);
insert into customers values (1, 'John', '[email protected]');
insert into customers values (2, 'Jane', '[email protected]');
create table rentals (
id integer primary key,
customer_id integer not null references customers(id),
disc_id integer not null references discs(id),
date_rented date,
date_returned date
);
insert into rentals values (1, 1, 7, '2013-10-01', '2013-10-03');
insert into rentals values (2, 2, 5, '2013-10-05', '2013-10-06');
insert into rentals values (3, 2, 2, '2013-11-02', null);
insert into rentals values (4, 2, 3, '2013-11-02', null);
create table ratings (
customer_id integer not null references customers(id),
movie_id integer not null references movies(id),
rating integer,
primary key (customer_id, movie_id)
);
insert into ratings values (1, 1, 1);
insert into ratings values (1, 2, 4);
insert into ratings values (1, 3, 5);
insert into ratings values (2, 1, 4);
我的邏輯是,我本來是要被插入的收視率表的新值或更新,並使用它們來比較最新的租金錶,看是否該客戶已經租用了該電影,如果他們這樣做了,那麼他們可以輸入評級。但我不能在這個大聲笑中轉移那個邏輯。除非有更簡單的方法來做到這一點。
你甚至不需要一個數,你可以使用'EXISTS(SELECT * FROM出租r,其中r.uid = new.uid和r.movie_id = new.movie)'在函數中。 (第二個想法,這甚至可能是一個FK的約束?) – wildplasser
@ e4c5即時瞭解如何計數()如何幫助大聲笑 – henryzo
好吧,所以這個函數計數時,新的信息匹配舊的信息權利?所以如果它匹配了1,所以如果租用> 0,那麼id在收視率中創建一個新的記錄?或者我想念這個大聲笑 – henryzo