开发者社区> 问答> 正文

mysql数据库的一个查询不知道该怎么写,请高人指点一二:报错

今天遇到一个需求,需要将一个查询结果插入到另外一张表中,并且为相同的数据生成一个相同的新的唯一外键。查询结果大概如下表这样:

name

item count
zhangsan item1 10
zhangsan item2 15
lisi item1 12
lisi item2 13
现在需要在这些数据插入到另外一张表时候为相同人物生成一个新的uuid(),需要的数据希望如下表这样:
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写法,谢谢大家了。

展开
收起
kun坤 2020-06-09 12:13:58 467 0
1 条回答
写回答
取消 提交回答
  • 相同的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
    2020-06-09 12:14:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载

相关镜像