簡體   English   中英

將單行展開為多行

[英]Expand single row to multiple rows

以下是兩列表的示例,我使用Bitwise運算符來存儲日期。

-- +---------+------+
-- | 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

但我想如果我能在單個查詢中做到這一點,那將加快性能。

您可以在要擴展的位掩碼之間加入使用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

一個要測試的SQLfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM