【问题标题】:Expand single row to multiple rows将单行扩展到多行
【发布时间】:2014-10-06 06:21:49
【问题描述】:

以下是一个两列表的示例,我使用按位运算符来存储天数。

-- +---------+------+
-- | Title   | Days |
-- +---------+------+
-- | Title 1 | 127  |
-- | Title 2 |  12  |
-- | Title 3 |   8  |
-- | Title 4 |  36  |
-- +---------+------+

我想要的是查询并展开每一行,所以它根据天数重复,每一行只包含一天。

-- +---------+------+
-- | Title   | Days |
-- +---------+------+
-- | Title 1 |   1  |
-- | Title 1 |   2  |
-- | Title 1 |   4  |
-- | Title 2 |   4  |
-- | Title 4 |   4  |
-- | Title 1 |   8  |
-- | Title 2 |   8  |
-- | Title 3 |   8  |
-- | Title 1 |  16  |
-- | Title 1 |  32  |
-- | Title 4 |  32  |
-- | Title 1 |  64  |
-- +---------+------+

我已经有一个解决方法,让应用程序多次查询数据库以检索每天的行。

SELECT * FROM `table_name` WHERE ( `days` & 1 ) = 1; -- ... and so on

但我想如果我可以在单个查询中做到这一点,会提高性能。

【问题讨论】:

    标签: sql sqlite android-sqlite


    【解决方案1】:

    您可以在要扩展的位掩码之间加入一个使用 UNION ALL 构造的常量表;

    SELECT a.title, b.value days
    FROM mytable a
    JOIN (SELECT 1 value UNION ALL SELECT 2 UNION ALL SELECT 4 UNION ALL 
          SELECT 8 UNION ALL SELECT 16 UNION ALL SELECT 32 UNION ALL SELECT 64) b
      ON a.days & b.value
    ORDER BY title, b.value
    

    An SQLfiddle to test with.

    【讨论】:

    • 谢谢,问题解决了。我只是修改了订单以实现我想要的。 ORDER BY b.value, a.title
    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多