mysql - 插入数据库并检查存在性

标签 mysql insert

我有两张 table

table A

ID | Prod_ID | Prod_Name | Price1 | Price2 |Price3 

table B

ID | Cust_ID | CUST_NAME

table C

ID | Cust_ID | Prod_ID | Price1 | Price2 | Price3

我现在遇到的问题是现在有一个方法,而每当有新的插入到表A时,它会检查表C中是否已经有与表B相关的行,如下所示

假设我有以下数据

1 | prodA | candy | 1 | 2 | 3
2 | prodB | towel | 2 | 3 | 3


1 | CustA | ccc   
2 | CustB | dddd  

1| custA | prodA | 1 | 2 | 3
2| custA | prodB | 2 | 3 | 3
3| custB | prodA | 1 | 2 | 3
4| custB | prodB | 2 | 3 | 3

所以当我插入一个新项目时,它会首先调用“cup”,价格为 4, 4, 4 插入表A

1 | prodA | candy | 1 | 2 | 3
2 | prodB | towel | 2 | 3 | 3
3 | prodC | cup   | 4 | 4 | 4

表c变为

1| custA | prodA | 1 | 2 | 3
2| custA | prodB | 2 | 3 | 3
3| custB | prodA | 1 | 2 | 3
4| custB | prodB | 2 | 3 | 3
5| custA | prodC | 4 | 4 | 4
6| custB | prodC | 4 | 4 | 4

我可以简单地通过每次删除表 C 中的所有元素并创建新记录来完成此操作,但是,产品的价格可能会根据客户而变化,因为表 B 中的价格只是引用/标准价格,稍后每个客户都会有一些小的调整,所以我不能直接删除整个表并创建新的表。

我想知道是否有一种简单的方法可以执行以下操作: A) 每当创建一个新产品时,检查该产品是否已分配给表 C 中的所有客户,如果没有,则插入缺少的产品

B) 每当创建新客户时,检查并查看注册了哪些产品并将所有产品分配给该新客户到表 C

我尝试过这样的事情

insert ignore into tableC (tableC.Cust, tableC.Prod) 
select tableA.custID, tableB.prodID from tableA cross join tableB 
where not exists(select tableC.Cust = tableA.custID 
and tableC.Prod = tableB.prodID)

我知道它不正确,但这是我试图解决这个问题的尝试

最佳答案

简化模型

drop table if exists t;
create table t
(cid int, pid int, p1 int,
key tk1(cid),
unique key tu1 (cid,pid));

insert into t values
(1,1,1),(2,2,20);

按预期插入。

您预计第二次插入会失败

insert into t values
    (1,1,1);

确实如此

ERROR 1062 (23000): Duplicate entry '1-1' for key 'tu1'

请注意,它在复合唯一键上失败

如果你

insert into t values
(1,1,30)
on duplicate key update cid = values(cid);

不提示,只需更新已有的内容即可。

关于mysql - 插入数据库并检查存在性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766933/

相关文章:

mysql - Group By mysql在排序时显示不同的记录

php - 循环遍历记录集(PHP + MySQL),将列表项中的每 2 条记录分组

php - 插入查询foreach循环麻烦

arrays - Excel 公式填充数组

sql - 使用 CTE 插入雪花

php - 有没有办法在实际插入或更新之前测试 mysql 插入或更新?

php - 无法插入指向数据库的链接

mysql - 如何在 MySQL 的 PROCEDURE 中使用新插入记录的 id?

mysql - 从字段记录中选择计数日期的 SQL 查询

php - 是否有像 phpMyAdmin 这样的工具可以配置为只访问一个数据库?