更好的方法在MySQL中实现以下操作?

时间:2012-07-31 08:59:34

标签: mysql sql database

我得到一个价格列表,如下所示: (这是选择查询按价格asc排序的结果)

    price   color   quanlity
o_id            
1     2     R       medium 
3     3     G       bad
4     4     G       good
5     6     B       good
2     8     R       medium

现在我需要根据要求配对这些选项:

e.g。如果我需要2 R(红色)和4 G(绿色)

我想返回一个可能的组合列表(按价格asc排序),如:

        R(2)    G(4)    
c_id    o_id    o_id    total price
1          1    3       16
2          1    4       20
3          2    3       28
4          2    4       32

我目前的解决方案是对数据库进行多次查询:

(我在应用层/后端使用Java。)

  1. 选择不同的颜色,并将其存储在列表
  2. 在For循环中,选择每种颜色的选项到不同的临时表
  3. 加入表格列表,并计算总数,按总计排序。
  4. 但有没有办法将上述操作压缩成存储过程或更优雅的东西?

1 个答案:

答案 0 :(得分:1)

您只需要一个简单的自我加入:

SELECT   R.o_id AS R_id, G.o_id AS G_id, 2*R.price + 4*G.price AS total
FROM     mytable R JOIN mytable G ON R.color = 'R' AND G.color = 'G'
ORDER BY total

sqlfiddle上查看。