【问题标题】:Get specific "version" of a column获取列的特定“版本”
【发布时间】: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,因此这涵盖了所有数据。

如果有一个解决方案只给出非零和非空值中的任何一个,那也可以,尽管我更喜欢上面的。

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    我建议您采用一种方法:

    1. 创建一个临时表,一个附加列用于标志“otherbd”;
    2. 把两张桌子上的所有东西都扔进去;
    3.删除不需要的行;

    【讨论】:

      【解决方案2】:

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

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

      概念是将您的两个表与此 StatusPriorty 表连接起来,对记录进行分组并使用 MAX(Priority) 来获取结果

      【讨论】:

        猜你喜欢
        • 2010-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        相关资源
        最近更新 更多