How do I get all combinations of data from a MySQL table?

后端 未结 3 809
长情又很酷
长情又很酷 2021-01-14 07:05

I have spent the last five hours trying to get every product option combination from a table but I\'m totally stuck now. I have a table with data like (simplified):

相关标签:
3条回答
  • 2021-01-14 07:33
    select option_id, value_id
    from assigned_options
    group by option_id, value_id
    order by option_id, value_id
    
    0 讨论(0)
  • 2021-01-14 07:46

    Given your table... I'm assuming you want every possible combo of value and option. That's a cross join (a join without any ON or where clause limiting the results):

     SELECT a.value_id, b.option_id 
         FROM assigned_options a 
         JOIN assigned_options b 
         GROUP BY a.value_id, b.option_id 
    

    The group by filters out the duplicate results.

    Do you have 2 other tables value and option that you want to pull all combinations of?

    0 讨论(0)
  • 2021-01-14 07:47

    In TSQL you can use a recursive CTE, Can''t remember where I got it, but pretty sweet. Note MYSQL doesn't use "With" option, so it won't work in MySQL

    WITH Numbers(N) AS (
                        SELECT N
                        FROM ( VALUES(1), (2), (3), (4), (5), (6)) Numbers(N)),
                            Recur(N,Combination) AS (
                            SELECT N, CAST(N AS VARCHAR(20)) 
                            FROM Numbers
    
    
    UNION ALL
    
    SELECT n.N,CAST(r.Combination + ',' + CAST(n.N AS VARCHAR(10)) AS VARCHAR(20)) 
    FROM Recur r
    INNER JOIN Numbers n ON n.N > r.N)
    
    
    
    select Combination
    from RECUR
    ORDER BY LEN(Combination),Combination;
    
    0 讨论(0)
提交回复
热议问题