mysql - 如何同时向3个表中插入和更新数据

标签 mysql vb.net visual-studio-2010

客户 电话号码 客户有电话号码

customers -> detailed
customers.customer_id int(11) primary auto_increment
customers.customer_name varchar(255)

phonenumbers -> detailed
phonenumbers.phonenumber_id int(11) primary auto_increment
phonenumbers.phonenumber_type int(11)
phonenumbers.phonenumber_name varchar(255)
phonenumbers.phonenumber varchar(15)

customers_has_phonenumbers -> detailed
customers_has_phonenumbers.customer_id int(11) -> customers_customer_id
customers_has_phonenumbers.phonenumber_id int(11) -> phonenumbers_phonenumber_id

如何插入和更新电话号码

希望大家帮忙

最佳答案

插入新电话号码

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.phonenumber_id)以检索phonenumbers.phonenumber_id值。同一更新语句中的客户子选择也是如此。

此外,我不确定您在插入新电话号码时是否已经有客户行?如果没有,那么您必须在插入customers_has_phonenumbers 表之前插入新的客户行。

希望这有帮助。

关于mysql - 如何同时向3个表中插入和更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7646287/

相关文章:

vb.net - 如何在 VB.NET 中完成 Visual Studio 代码段?

mysql - 我需要选择条件这个

javascript - 状态的多选列表框不显示另一个列表框中的所有城市(Php,mysql,ajax)

C# 类库方法摘要未显示在 vb.net 项目的智能感知中

c# - 正则表达式来获取样本的特定部分

c++ - 写入时 WaitForMultipleObjects 访问冲突

mysql - 在 MySQL 中使用关系

mysql - Nodejs-Express-Mysql : render view after post

c++ - 我无法使用 getline() 读取一行

c++ - 确定日期之间的差异