mysql:4个字段组成的序列,该序列唯一

十八道胡同 2020-09-08 06:26:50
 
insert into etcvehiclerecord(userId,vehicleId,obuid,cardid)
select distinct o.userId , o.vehicleId ,o.id obuid ,c.id cardid from
obuupload o
left JOIN cardupload c ON o.vehicleId = c.vehicleId and o.userId =c.userId
left JOIN vehicleupload v ON o.vehicleId = v.id and o.userId =v.userId;


3个表,组合查询,查询出来4个字段,该4个字段组成序列唯一,其中某个字段因为可能为NULL,所以这4个字段无法组成联合索引。
历史的数据,可以用这个脚本查出来。但是增量的数据怎么增加呢?


一种办法,就是代码的方式,先把所有的序列查出来,然后挨个判断4字段序列。
如果新的序列是4个字段全部为非空,且表里面没有则新增。
如果新的序列是4个字段全部为非空,但表里面有一个序列某字段为空的。把之前的存在某字段为空的序列删掉,把新的4序列入库。
如果新的序列是4个字段,部分字段为空(是新办的),直接入库。
但是这个比较麻烦,想问下大家有没有直接用sql脚本的方式来做?
...全文
243 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
evanweng 2020-09-09
  • 打赏
  • 举报
回复
之所以用concat_ws不用concat是因为concat如果有一个值是null,则整个结果都是null,concat_ws就没有这种情况。然后concat_ws中的字段,如果不想去修改表中的null为空字符串,可以每个字段都加ifnull(user_id,''),就是执行可能会慢一点
evanweng 2020-09-09
  • 打赏
  • 举报
回复
insert into etcvehiclerecord(userId,vehicleId,obuid,cardid) select distinct o.userId , o.vehicleId ,o.id obuid ,c.id cardid from obuupload o left JOIN cardupload c ON o.vehicleId = c.vehicleId and o.userId =c.userId left JOIN vehicleupload v ON o.vehicleId = v.id and o.userId =v.userId where not exists ( select 1 from etcvehiclerecord e where concat_ws(',',e.userId,e.vehicleId,e.obuid,e.cardid) = concat_ws(',',o.userId , o.vehicleId ,o.id obuid ,c.id cardid) ) concat_ws里面的字段,如果是空值,要用空字符串表示,不能用null,不然可能会有错误。例如concat_ws(',','1',null,'2')='1,2',concat_ws(',','1','','2')='1,,2',然后你这个insert ignore into也要看看有没有空值的问题
十八道胡同 2020-09-09
  • 打赏
  • 举报
回复
换了一下思路。 把这4个序列弄成主键 ,以后更新时用insert ignore into 的方式来了。
内容概要:本文详细介绍了 MySQL 中 AUTO_INCREMENT 属性的使用方法,这是一种用于模拟序列行为的方式。它允许在表中创建自增字段,通常作为主键,确保每行数据都有唯一的标识符。文中提供了创建带有自增字段的表的示例,解释了插入数据时如何自动分配自增值,并介绍了如何使用 LAST_INSERT_ID() 函数获取最近插入行的自增值。还说明了如何查看表的当前自增值以及注意事项,如删除行后自增值不会被重用。此外,文章展示了在 PERL 和 PHP 中获取自增值的方法,并讨论了重置序列和设置序列开始值的具体操作。; 适合人群:对 MySQL 数据库有一定了解的数据库管理员或开发人员,尤其是那些需要理解和使用自增字段进行数据管理的人群。; 使用场景及目标:① 学习如何在 MySQL 中创建具有自增字段的数据表;② 掌握插入数据时不指定自增字段值的情况下,数据库如何自动分配唯一标识符;③ 了解如何在不同编程语言中获取最近插入行的自增值;④ 掌握重置序列和设置序列开始值的方法。; 其他说明:AUTO_INCREMENT 属性只能应用于整数类型的字段,并且在实际应用中应谨慎处理自增字段的重置,以免造成数据混乱。同时,在设置自增值时要注意避免唯一性冲突。

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧