循环遍历每行结果的过程

时间:2011-09-06 15:33:29

标签: mysql stored-procedures

我想在mysql中创建一个过程,从查询结果循环到每一行。所以我有这个结果查询:

Person | Money1 | Money2
     A |    100 |    100
     B |    200 |    200
     C |    150 |    150
     D |    220 |    220

我想比较每个人的钱,逻辑看起来像这样。

A with B
  Money1[A] --> Money1[B]
  Money2[A] --> Money2[B]
A with C
  Money1[A] --> Money1[C]
  Money2[A] --> Money2[C]
A with D
  Money1[A] --> Money1[D]
  Money2[A] --> Money2[D]

这是loop1的结束然后继续..

B with C
  Money1[B] --> Money1[C]
  Money2[B] --> Money2[C]
B with D
  Money1[B] --> Money1[D]
  Money2[B] --> Money2[D]

这是loop2和最后一个结束..

C with D
  Money1[C] --> Money1[D]
  Money2[C] --> Money2[D]

我已经有了比较钱的功能,它应该像这样使用:

SELECT compare(from_money1, from_money2, to_money1, to_money2);

所以结果将如下所示:

Person | Result1 | Result2
    AB |    -100 |    -100
    AC |     -50 |     -50
    AD |    -120 |    -120
    BC |      50 |      50
    BD |     -20 |     -20
    CD |     -70 |     -70

但我很困惑如何从结果查询中循环它,我可以在程序mysql上执行此操作,如果有一个示例,它将非常有用。

1 个答案:

答案 0 :(得分:0)

我认为你过于复杂化了。这就是你所需要的(假设表名是金钱)

select concat(m1.person, m2.person) as Person, 
       m1.money1-m2.money1 as Result1, 
       m1.money2-m2.money2 as Result2 
  from money m1, 
       money m2 
 where m1.person < m2.person 
 order by m1.person, m2.person;