recherche

Maison  >  Questions et réponses  >  le corps du texte

php - Que dois-je faire si UPDATE utilise une sous-requête pour mettre à jour une colonne?

L'exécution SQL suivante est trop lente, comment dois-je l'optimiser ?

 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';

Parmi eux, la table AA et la table BB sont les mêmes, elles ne forment qu'une seule table

大家讲道理大家讲道理2734 Il y a quelques jours751

répondre à tous(4)je répondrai

  • 漂亮男人

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

    J'ai pas bien compris,
    Puisque c'est la même étape, il suffit de
    update table set colonne 1 = colonne 2 où condition
    et c'est tout

    répondre
    0
  • 習慣沉默

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

    1. Créez une nouvelle table basée sur la nouvelle valeur, puis fusionnez les deux tables et enfin supprimez la table temporaire ;

    2. Créez une transaction, écrivez-y toutes les mises à jour et enfin validez

    3.  ;

    répondre
    0
  • 某草草

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

    Ce que je ne comprends pas, c'est si AA et BB sont une table ou deux tables
    S'il s'agit d'une table, la méthode de @prolifes peut être utilisée
    S'il s'agit de deux tables,
    mettre à jour AA a, BB b définit a. .col1 = b. col2 où a.bh = b.bh et a.year='2017-2018' et b.year='2016-2017',
    De plus, la lenteur est liée à la taille de vos données et à la index, je donne juste une méthode générale, quelle est son efficacité, vous devez l'essayer vous-même

    répondre
    0
  • ringa_lee

    ringa_lee2017-06-05 11:11:33

    Merci pour vos suggestions. Au final, j'ai utilisé celle d'Internet, qui est légèrement plus efficace :
    Oracle propose deux méthodes :
    Mise à jour de la vue en ligne

    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;

    répondre
    0
  • Annulerrépondre