Я не думаю, что ваша текущая модель данных является оптимальной / нормализованной, и причина, по которой ОБНОВЛЕНИЕ так озадачивает.Чтобы ОБНОВЛЕНИЕ работало, вам понадобится предложение WHERE для фильтрации «id», который вы хотите обновить;результат заявления CASE, напр.id = 02 когда оставлено (telnum, 4) = 0044. Для этого вам нужно будет создать хранимую процедуру (одним из решений является использование курсора).
Однако я бы предложил альтернативный нормализованный дизайнчто-то вроде следующего:
Я предполагаю, что в каждой стране может быть много префиксов (кодов городов):
create table areacodes
(
id int auto_increment primary key,
areacode varchar(10),
fkCountry int
);
insert into areacodes(areacode,fkCountry)
values
('0039',1),('00441',2),('0054',3);
create table countries(
id int auto_increment primary key,
country varchar(20)
);
insert into countries(country)
values('Italy'),
('UK'),('Algeria');
create table continents(
id int auto_increment primary key,
continent varchar(20));
insert into continents(continent)
values('Europe'),('North America'),('Asia'),
('Australia'),('Africa'),
('South America'), ('Antartica');
Следующая таблица связывает страны с континентами:
create table country_continent(
fkCountry int,
fkContinent int);
insert into country_continent(fkCountry,fkContinent)
values(1,3),(2,1),(3,5),(4,1),(5,1),(6,6)
Наконец, таблица telcountry.Вам нужно будет отделить ареакод от телнума и сохранить их обоих.Затем вы можете найти страну и континент с помощью ареакода.
create table telcountry_table(
id int,
areacode varchar(10),
telnum varchar(20),
name varchar (50)
);
insert into telcountry_table(id,areacode,telnum,name)
values
(1,'0039','234244','Di Maggio'),
(2,'00441','2345','White'),
(3,'0054','54321','Sergio');
Вы можете найти страну и континент следующим образом:
select country
from areacodes a join countries c
on c.id = a.fkCountry
where areacode = '00441'
И континент:
select continent
from country_continent cc join continents c
on cc.fkContinent = c.id
where cc.fkCountry =
(
select c.id
from areacodes a join countries c
on c.id = a.fkCountry
where areacode = '00441'
)