Могу ли я иметь запрос в триггере? - PullRequest
0 голосов
/ 01 мая 2020

Я новичок в SQL. Я не могу использовать правильные термины или синтаксис. Цель кодекса состоит в том, что если население города уменьшается более чем на 10%, то население континента этого города уменьшается на 5%. Я пытался связать популярность города с его континентом, используя вложенный запрос. Это правильный путь к go?

DELIMITER $$ 
CREATE TRIGGER PopAdjustment 
AFTER UPDATE
ON City 
FOR EACH ROW 
IF (City.NEW_Population / City.Population) =  < .9   
THEN
SELECT City.Name, Country.Continent FROM Country JOIN Country ON  City.CountryCode = Country.Code 
WHERE City.NEW_Population / City.Population  =  < .9 
SET Country.Continent = (Country.Continent * 0.95) ; 
END IF;
END$$
DELIMITER ;

1 Ответ

0 голосов
/ 01 мая 2020

Синтаксически и концептуально в этом триггере много неправильного. Я советую вам прочитать руководство. Но, чтобы помочь уточнить, пожалуйста, также изучите это

drop table if exists city,country;
create table city(name varchar(10), population int, countrycode int);
create table country(code int primary key,continent int);
insert into city values('aaa',100,1);
insert into country values(1,100);

drop trigger if exists t;
DELIMITER $$ 
CREATE TRIGGER t 
AFTER UPDATE
ON City 
FOR EACH ROW 
begin
 IF (NEW.Population / old.Population) <= .9   THEN
    update country
        SET Country.Continent = Country.Continent * 0.95 
        where country.code = new.countrycode; 
 END IF;
END $$
DELIMITER ;
update city
    set population = 80
    where city.name = 'aaa';

select * from city;
select * from country;
+------+------------+-------------+
| name | population | countrycode |
+------+------------+-------------+
| aaa  |         80 |           1 |
+------+------------+-------------+
1 row in set (0.001 sec)
...