今天遇到一个需求,需要将一个查询结果插入到另外一张表中,并且为相同的数据生成一个相同的新的唯一外键。查询结果大概如下表这样:
name | item | count |
zhangsan | item1 | 10 |
zhangsan | item2 | 15 |
lisi | item1 | 12 |
lisi | item2 | 13 |
name | item | count | new_uuid |
zhangsan | item1 | 10 | new_uuid1 |
zhangsan | item2 | 15 | new_uuid1 |
lisi | item1 | 12 | new_uuid2 |
lisi | item2 | 13 | new_uuid2 |
现实情况比我上边的这个表格复杂的多,请大家不要纠结于这个需求合不合理,希望大家能给我一个能产生类似这个效果的sql写法,谢谢大家了。
相同的name生成一个相同的uuid是么?试一下这样子:
select name, ( select new_uuid from ( select distinct name as n1, uuid() as new_uuid from tableName ) as v1 where n1=name ) from tableName ;######后边又想了一下,其实用左连接可能更好一点,像下边这样: select t1.name, v1.new_uuid from tableName as t1 left join ( select distinct name as n1, uuid() as new_uuid from tableName ) as v1 on t1.name=v1.n1######谢谢,已经试了确实可行。###### 生成一个相同的新的唯一主键######不好意思,我可能用词不太合适哈,我想要表达的是相同的人产生一个相同的新的uuid,这个uuid会在下一个动作中插入到另外一个表中成为一个主键。######主键都唯一了,谈何多个相同呢?######不好意思,我可能用词不太合适哈,我想要表达的是相同的人产生一个相同的新的uuid,这个uuid会在下一个动作中插入到另外一个表中成为一个主键。所以这里应该是外键。######如果要是按照你说的是在该表中是外键,那么就是先在你插入该条数据的时候对该张表进行一下遍历,如果遍历有同样的数据那么就直接获取到存在的数据的外键,也就是new_uuid;如果不存在那么久直接生成一个新的uuid不就成了######@邹德鹏######意思有点接近了,就是在插入的时候如果是第一次遇到这个数据就生成一个uuid,再次遇到同样的数据就取这次生成的uuid,直到遇到新的数据再生成一个新的uuid,再次遇到这两个已经生成uuid的数据的时候就取各自之前生成的uuid。用程序很好解决,问题是现在在sql里边没有这样子写过,也没查到类似的例子,才请大家帮忙哈。######@红薯 ,请大大指点一下哈 v
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。