如何将前一行连接到多列上的每一行匹配MySQL

时间:2015-07-08 18:49:27

标签: mysql join

我想要一个SQL语句,我会在第一行(前一个因为ID,日期时间或其他任何内容)的每一行上获得多列匹配的每一行。任何想法或我必须使用DB + app组合?

示例表:

id  col1  col2  col3
1   1     2     3
2   1     2     4
3   1     2     5
4   2     2     1

结果(匹配的cols是col1和col2,按id排序):

id  col1  col2  col3  priorID  priorCol1  priorCol2  priorCol3
1   1     2     3     n        n          n          n
2   1     2     4     1        1          2          3
3   1     2     5     2        1          2          4
4   2     2     1     n        n          n          n

谢谢。

1 个答案:

答案 0 :(得分:1)

我建议使用这样的SQL函数:

DELIMITER $$

CREATE FUNCTION my_func (idx INT) 
 RETURNS INT
 READS SQL DATA
BEGIN
 RETURN (
  SELECT t2.ID 
  FROM test AS t1 
  LEFT JOIN test AS t2 
  ON (t1.COL1=t2.COL1 AND t1.COL2=t2.COL2 AND t1.ID > t2.ID) 
  WHERE t1.ID = idx
  ORDER BY t2.ID DESC
  LIMIT 1
 );
    END$$

DELIMITER;

然后在您的SQL查询中使用它,如

SELECT * FROM test AS t1 
LEFT JOIN test as t2 ON (t2.ID=my_func(t1.ID))
ORDER BY t1.ID

不要忘记使用正确的索引,否则你可以在这里轻松创建一个非常缓慢的瓶颈。