suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php - Was soll ich tun, wenn UPDATE eine Unterabfrage zum Aktualisieren einer Spalte verwendet?

Die folgende SQL-Ausführung ist zu langsam. Wie soll ich sie optimieren?

 UPDATE AA A
     SET COL1 =
         (SELECT B.COL2
            FROM BB B
           WHERE B.BH = A.BH
           AND B.YEAR = '2016-2017'
           )
 WHERE A.YEAR = '2017-2018';

Davon sind der AA-Tisch und der BB-Tisch gleich, sie sind ein Tisch

大家讲道理大家讲道理2786 Tage vor783

Antworte allen(4)Ich werde antworten

  • 漂亮男人

    漂亮男人2017-06-05 11:11:33

    没太听明白,
    既然是同一个步,直接
    update 表 set 列1=列2 where 条件
    就行了呀

    Antwort
    0
  • 習慣沉默

    習慣沉默2017-06-05 11:11:33

    1. 按新的值新建一个表,然后两个表 merge 操作,最后删临时表;

    2. 建立事务,把所有 update 写进去,最后 commit;

    Antwort
    0
  • 某草草

    某草草2017-06-05 11:11:33

    没看懂的是AA 和 BB 是一张表 还是两张表,
    如果是一张表@prolifes 的方法就可以
    如果是两张表
    update AA a, BB b set a.col1 = b.col2 where a.bh = b.bh and a.year='2017-2018' and b.year='2016-2017',
    还有,慢和你的数据量大小, 索引都有关系, 我只是给一个一般方法, 效果怎么样,得自己试试

    Antwort
    0
  • ringa_lee

    ringa_lee2017-06-05 11:11:33

    谢谢大家的建议,最后用的是网上的这种,效率稍微快了一点:
    Oracle有两种方式:
    内联视图更新

    update (
     
        select t1.id t1id ,t1.nickname t1nickname,t1.playNum t1playnum,t2.id t2id ,t2.nickname t2nickname,t2.playNum t2playnum
    
        from t1 inner join t2 on (t1.id=t2.id)
    
    )
    
    set t1nickname=t2nickname,t1playnum=t2playnum;

    Antwort
    0
  • StornierenAntwort