如何将选定的记录保存到变量中?

时间:2018-06-13 20:11:57

标签: mysql sql

我遇到以下问题的问题..

在记录中插入表rtoxvta记录之后,我需要在循环结束之前消除当前选择的vta表的记录。

为此,我宣布一个新变量并为其分配vta id .. 但我该怎么做?

DROP PROCEDURE IF EXISTS ROWPERROW;
DELIMITER ;;

CREATE PROCEDURE ROWPERROW()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE indexx INT DEFAULT 0;
#DECLARE aux INT DEFAULT 0;

SELECT COUNT(*) FROM rto INTO n;
SET n = n +1;
SET indexx=0;
WHILE indexx<n DO 

 INSERT INTO rtoxvta (fecharto, importerto, fechavta, importevta)
  SELECT r.fecha, r.importe, v.fecha, v.importe
    FROM vta v
    left outer join rto r 
    ON r.id = indexx
    WHERE v.fecha >= r.fecha
    AND (
    (v.importe = r.importe) OR 
    (v.importe + 2 = r.importe) OR  
    (v.importe + 1 = r.importe) OR 
    (v.importe - 1 = r.importe) OR 
    (v.importe - 2 = r.importe))
    LIMIT 1;

  SET indexx = indexx + 1;

  #DELETE FROM vta WHERE id = aux;

END WHILE;
End;
;;

CALL ROWPERROW();

1 个答案:

答案 0 :(得分:1)

你必须分两步完成。首先获取要插入变量的记录的ID,然后插入该记录。然后你可以删除记录。

WHILE indexx<n DO 

  SELECT v.id, r.id INTO @v_id, @r_id
    FROM vta v
    join rto r 
    ON r.id = indexx
    WHERE v.fecha >= r.fecha
    AND r.importe BETWEEN v.importe - 2 AND v.importe + 2
    LIMIT 1;

 INSERT INTO rtoxvta (fecharto, importerto, fechavta, importevta)
 SELECT r.fecha, r.importe, v.fecha, v.importe
 FROM vta v
 CROSS JOIN rto r
 WHERE v.id = @v_id AND r.id = @r_id;

  SET indexx = indexx + 1;

  DELETE FROM vta WHERE id = @v_id;

END WHILE;

此外,如果您在rto子句中使用WHERE中的列,则应使用INNER JOIN而不是LEFT OUTER JOINWHERE条件与rto中没有匹配的任何行都不匹配,因此使用外部联接没有意义。