【问题标题】:How to update many rows and from Select sub query and get value for where too in MySQL如何在 MySQL 中更新多行并从 Select 子查询中获取 where 的值
【发布时间】:2017-09-22 18:07:01
【问题描述】:

当我的 where 条件值来自同一个 select 子查询时,我想从 Select 更新 10000 行。例如

UPDATE TableA A 
SET col1 = @val1, col2 = @val2
WHERE col3 = @val3;
 All @val value I get from SELECT statement.
SELECT @val1, @val2, @val3 From TableB B
WHERE B.Key = (condition).  

【问题讨论】:

    标签: mysql loops select


    【解决方案1】:

    这帮助我解决了我的问题。 我不确定这是否是最简单的解决方案,但对我有用。

    CREATE PROCEDURE cursor_ROWPERROW()
    BEGIN
      DECLARE val1 INT;
      DECLARE val2 VARCHAR(30);
      DECLARE val3 VARCHAR(30);
      DECLARE done INT DEFAULT FALSE;
      DECLARE cursor_i CURSOR FOR SELECT val1,val2, val3 FROM table_A
    WHERE = (condition);
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
      OPEN cursor_i;
     read_loop: LOOP
        FETCH cursor_i INTO val1,val2, val3;
        IF done THEN
          LEAVE read_loop;
        END IF;
        UPDATE TableA A
        SET A.valA1 = val1, A.valA2 = val2
        WHERE A.valA3 = val3;
      END LOOP;
      CLOSE cursor_i;
    END;
    ;;
    

    【讨论】:

      【解决方案2】:

      试试这个:

      UPDATE TableA A 
      JOIN TableB B
      ON B.val3 = A.col3
      SET A.col1 = b.val1, 
          A.col2 = b.val2
      WHERE B.Key = (condition)
      

      【讨论】:

      • 我了解您的查询,但我从 Select 语句中获取了所有值,但我不知道如何从 Select 语句中传递值。
      • TableB 在查询中连接到 TableA,这就是它获取值的地方。您可以使用选择,但只要您可以定义条件以匹配两个表中的源行和目标行,这将起作用。
      猜你喜欢
      • 2011-10-20
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多