我有一个使用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所以这涵盖了所有数据。
如果某个解决方案只提供非零和非空的解决方案,那么这也可以起作用,尽管我更喜欢上述方法。
答案 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(优先级)来获得结果