求助,如何把一个现有的key-value数据集合并到某个sql查询结果中?

2012-12-30 12:38:19 +08:00
 azure
在数据库中取出id和name,然后我外部还有一个字典,{KEY,VALUE}是id和性别.
所以现在有两个数据集:
数据集1:
select id,name from table.
数据集2:
{"1":"男","2":"女",.....}

怎么把这两个数据合并起来让查询结果是

id name sex
1 james 男
2 kobe 女


先查询出数据库中的id和名字,然后循环赋值这样效率感觉好低下。 sql查询里有没有类似的解决方法?或者其他更好的解决方案?
3731 次点击
所在节点    Python
7 条回复
plprapper
2012-12-30 12:43:02 +08:00
没明白为啥性别没存数据库呢
azure
2012-12-30 12:46:47 +08:00
@plprapper 这个代码只是为了让需求描述得更容易理解。真实需求这里不是性别,而是某个外部数据,或者一些经常需要变动所以存在内存缓存中并没有写到数据库的数据,而且这部分数据本身并不太需要本地化保存。
plprapper
2012-12-30 13:11:06 +08:00
你数据不持久化到数据库。 这个和sql还能有啥联系吗?
除非是数据库+插件+nosql 做个关联 。商业项目不推荐。

另外所谓的效率低是什么意思 编码层面上的还是运行。数据量多大呢?
不愿意写for循环就写到对象构造里面去呗 。
运行层面,不知道你如何实现的呢。
notedit
2012-12-30 14:17:03 +08:00
你数据量有多少 循环一下比走一次网络快多了 循环一下百万级别的都不会有性能问题
azure
2012-12-30 14:24:38 +08:00
@notedit 所以说,即使我把这些数据丢到另一个同服务器的数据库里做跨数据库查询,性能都不如循环嘛?

以下两种情况相比循环处理,性能谁高?还是说,循环处理依然快过以下2种?
1.新建一个同服务器上的数据库用来存数据集2,然后跨数据库查询。
2.同数据库里新建一张表(但是因为这个数据库是一个完整系统,去申请建一个新的表会比较麻烦,不一定会被同意)。
notedit
2012-12-30 14:36:39 +08:00
@azure 如果是我选的话 我会选第二种方案

为什么? 一是查询方便 而是没有给系统造成额外的复杂度

不赞成跨数据库查询 给系统造成额外的复杂度

你数据量有多少 百万级别的都可以放到进程内存中 遍历一边也就毫秒级的时间吧
azure
2012-12-30 14:53:59 +08:00
@notedit 好吧。就按您的说法做。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/56210

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX