【发布时间】:2010-10-20 15:16:42
【问题描述】:
我有一个使用 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;
然后解析逗号分隔的“状态”输出以获得“正确”状态。不过,我想要一个纯 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
status 只能(在 db 中)为 -2,-1,0,NULL,1,2,因此这涵盖了所有数据。
如果有一个解决方案只给出非零和非空值中的任何一个,那也可以,尽管我更喜欢上面的。
【问题讨论】: