首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql:如果另一列在命名空间中造成冲突,则更新列

sql:如果另一列在命名空间中造成冲突,则更新列
EN

Stack Overflow用户
提问于 2014-01-17 17:42:01
回答 1查看 95关注 0票数 0

我有一个SQL表,其中有一个包列表( 10000个唯一条目的顺序)和任何给定包的相应类别(100个唯一条目的顺序)。给定的包可以是多个类别的一部分(顺序为15000个唯一组合,这就是表的大小)。

所有包名都应该是唯一的,而不是与类别名称冲突,然而,情况似乎并非如此。

我需要的是找出10k包中的任何一个是否与100个类别中的任何一个具有相同的名称,如果是的话,修改所有这样的包名以包括一个,pkg后缀,以确保对两个名称空间的访问是共享的,并且保持惟一。

最简单的情况是:

代码语言:javascript
复制
sqlite> select * from categories where value=fullpkgpath;
lang/mono|lang/mono

sqlite> select fullpkgpath, value from categories where fullpkgpath="lang/mono";
lang/mono|devel
lang/mono|lang
lang/mono|lang/mono

应将其转化为:

代码语言:javascript
复制
lang/mono,pkg|devel
lang/mono,pkg|lang
lang/mono,pkg|lang/mono

但是,也可能存在更间接的冲突(特定的包与它不属于的类别冲突),如下所示:

代码语言:javascript
复制
sqlite> select * from categories where fullpkgpath="lang/erlang" or fullpkgpath="lang/node";
lang/erlang|lang
lang/node|devel
lang/node|lang
lang/node|lang/python

应将其转化为:

代码语言:javascript
复制
lang/erlang,pkg|lang
lang/node,pkg|devel
lang/node,pkg|lang
lang/node,pkg|lang/python

因为lang/erlanglang/node本身也都是类别:

代码语言:javascript
复制
sqlite> select * from categories where value="lang/erlang" limit 8;
databases/erl-Emysql|lang/erlang
databases/erl-couchbeam|lang/erlang
databases/erl-epgsql|lang/erlang
databases/erl-sqerl|lang/erlang
devel/erl-automeck|lang/erlang
devel/erl-bear|lang/erlang
devel/erl-depsolver|lang/erlang
devel/erl-ej|lang/erlang

sqlite> select * from categories where value="lang/node" limit 8;
databases/node-pg|lang/node
databases/node-sqlite3|lang/node
devel/node-async|lang/node
devel/node-bindings|lang/node
devel/node-buffer-writer|lang/node
devel/node-cloned|lang/node
devel/node-expresso|lang/node
devel/node-fibers|lang/node

我正在使用sqlite3和珀尔在OpenBSD上。如果需要的话,数据库可在ftp上使用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-17 18:35:17

若要检查值是否在一组值中,请使用IN:

代码语言:javascript
复制
UPDATE categories
SET fullpkgpath = fullpkgpath || ',pkg'
WHERE fullpkgpath IN (SELECT value
                      FROM categories)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21192388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档