如何执行具有相同值的行组合?

时间:2013-07-10 21:14:23

标签: mysql

我的表格结构有点像这样:

date    name    marks
x       a       4
y       a       2
x       b       2
y       b       7
x       c       8
y       c       6
x       d       9
y       d       6

我想执行所有行的组合,但是,在执行组合时,应将name视为一个。输出必须如下:

date    name    marks   x.date  x.name  x.marks
x       a       4       x       b       2   # a & b
y       a       2       y       b       7
x       a       4       x       c       8   # a & c
y       a       2       y       c       6
x       a       4       x       d       9   # a & d
y       a       2       y       d       6
x       b       2       x       d       9   # b & c
y       b       7       y       d       6
x       b       2       x       c       8   # b & d
y       b       7       y       c       6
x       c       8       x       d       9   # c & d
y       c       6       y       d       6

我已经厌倦了各种想法,比如交叉加入,分组等,但都是徒劳的。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

Select a.date adate, a.name aname, a.marks amark, 
x.date xdate, x.name xname, x.marks xmarks
FROM A a, a x 
where A.name < x.Name and a.date = x.date
order by aname, xname, adate, xdate

这是一个工作演示的小提琴。 http://sqlfiddle.com/#!2/105f0/19/0

但是将来展示你的作品。发布您尝试过的查询,以便人们可以指出正确的方向。

这里的诀窍是你希望A.name的两倍&lt; x.name但仅在a.date和x.dates匹配时。因此需要交叉连接,但您不想简单地使用&lt;&gt;或=