获取列的特定“版本”

时间:2009-04-20 17:31:58

标签: sql sqlite

我有一个使用SQLite在本地存储数据的应用。存储数据的文件可能不止一个。所有文件都包含一个项目列表,但只有一个文件具有当前用户的“正确”状态(基本上,$ HOME中有一个“用户”数据库,而/ etc中有一个“系统范围”数据库)。

通常,两个文件都包含相同的项目列表,只有状态列会有所不同。但是,如果要么包含不在两者中的项目,我也想要这些数据。

SQLite没有FULL OUTER JOIN。

我提出的解决方案是:

SELECT item, group_concat(status) AS status FROM (SELECT item,status FROM items UNION SELECT item,status FROM otherdb.items) GROUP BY item;

然后解析以逗号分隔的“status”输出以获得“正确”状态。但是,我想要一个纯SQL解决方案。

我想要的状态值是:

If any = 1, status = 1
elif any = -1, status = -1
elif any = 2, status = 2
elif any = -2, status = -2
else status = 0 or NULL

状态可能只在(在db中)为-2,-1,0,NULL,1,2所以这涵盖了所有数据。

如果某个解决方案只提供非零和非空的解决方案,那么这也可以起作用,尽管我更喜欢上述方法。

2 个答案:

答案 0 :(得分:1)

我会用一种方法来吸引你:

1.创建一个临时表,一个标志为“otherbd”的adittional列;
2.扔掉那里的2张桌子里的所有东西;
3.删除你不想要的行;

答案 1 :(得分:1)

使用以下值创建状态优先级表

status  priority
  1       5
 -1       4
  2       3
 -2       2
  0       1
 NULL     0

概念是将这两个表连接到这个StatusPriorty表,对记录进行分组并使用MAX(优先级)来获得结果