簡體   English   中英

MySQL:根據數量列選擇多行

[英]MySQL: Select with multiple row based in quantity column

我有一個訂單表:

product|quantity

例:

bread|3

我需要一個像這樣的選擇:

row1- bread
row2- bread
row3- bread

我做了這樣的:

SELECT product FROM (
     SELECT product FROM order WHERE quantity > 0 UNION ALL
     SELECT product FROM order WHERE quantity > 1 UNION ALL
     SELECT product FROM order WHERE quantity > 2 UNION ALL
     SELECT product FROM order WHERE quantity > 3
) s;

一切都很好。 但是他們告訴我最大數量是4。現在我看到有12、32 ...的訂單,所以我不知道最大價值。

有沒有更好的方法可以做到這一點?

您需要一個生成數字的表。 如果您的orders表有足夠的行,則可以使用變量來生成數字:

select product
from orders o join
     (select (@rn := @rn + 1) as n
      from orders o cross join (select @rn := 0) vars
     ) n
     on n.n <= o.quantity;

這可以通過使用數字表來完成,如果您沒有數字表,則可以使用此答案中描述的方法動態生成一系列數字。 使用該方法,您可以運行如下查詢:

-- set up test data
CREATE TABLE Table1 (product VARCHAR(20), quantity int);
insert into Table1 values ('bread',3), ('butter',5), ('milk',2);

-- set up views for number series
CREATE VIEW generator_16
AS SELECT 0 n UNION ALL SELECT 1  UNION ALL SELECT 2  UNION ALL 
   SELECT 3   UNION ALL SELECT 4  UNION ALL SELECT 5  UNION ALL
   SELECT 6   UNION ALL SELECT 7  UNION ALL SELECT 8  UNION ALL
   SELECT 9   UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL
   SELECT 12  UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL 
   SELECT 15;

CREATE VIEW generator_256
AS SELECT ( ( hi.n * 16 ) + lo.n ) AS n
     FROM generator_16 lo, generator_16 hi;

-- and the actual query
SELECT product, t.quantity, i.n
FROM Table1 t
JOIN generator_256 i 
ON i.n BETWEEN 1 AND t.quantity
ORDER BY t.product, i.n;

結果:

| PRODUCT | QUANTITY | N |
|---------|----------|---|
|   bread |        3 | 1 |
|   bread |        3 | 2 |
|   bread |        3 | 3 |
|  butter |        5 | 1 |
|  butter |        5 | 2 |
|  butter |        5 | 3 |
|  butter |        5 | 4 |
|  butter |        5 | 5 |
|    milk |        2 | 1 |
|    milk |        2 | 2 |

示例SQL提琴

暫無
暫無

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

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