Введите новый номер телефона
insert into phonenumbers (phonenumber_type,phonenumber_name,phonenumber) values (1,'example name','example number');
insert into customers_has_phonenumbers (customers_customer_id,phonenumbers_phonenumber_id) values ((select customer_id from customers where customer_name = 'example customer name'),(select phonenumber_id from phonenumbers where phonenumber = 'example number');
Обновить номер телефона
insert into phonenumbers (phonenumber_type,phonenumber_name,phonenumber) values (1,'example name','new phone number');
update customers_has_phonenumbers set phonenumbers_phonenumber_id = (select phonenumber_id from phonenumbers where phonenumber = 'new phone number') where phonenumbers_phonenumber_id = (select phonenumber_id from phonenumbers where phonenumber = 'old phone number') and customers_customer_id = (select customer_id from customers where customer_name = 'example customer name');
Не уверен, как бы вы справились с наличием клиентов с одинаковыми именами!
Вероятно, стоит иметь уникальный ключ в столбце phonenumbers.phonenumber, если это разумно. В противном случае все, что однозначно идентифицирует строку phonenumbers (кроме phonenumbers.phonenumber_id), следует использовать в суб-выборе update для получения значения phonenumbers.phonenumber_id. То же самое касается подвыбора клиента в том же заявлении об обновлении.
Кроме того, я не уверен, есть ли у вас строка с клиентами, когда вы вводите новый номер телефона? Если нет, то вам придется вставить строку новых клиентов перед вставкой в таблицу Customers_has_phonenumbers.
Надеюсь, это поможет.