2010-01-06 5 views
24

Je suis confus sur la façon de copier une colonne d'une table à une autre table en utilisant où. J'ai écrit une requête SQL, mais elle indique que le délai de blocage des transactions a été dépassé ou que la requête renvoie plus d'une ligne.
en utilisant MySQL
Fondamentalement,
J'ai:copier une colonne d'une table à l'autre

Table 1: Results 
BuildID platform_to_insert 

Table 2: build 
BuildID correct_platform 

update results set results.platform_to_insert 
    = (select correct_platform from 
     build where results.BuildID = build.BuildID) 
+0

Combien de lignes avez-vous dans chaque table? Montrez-nous le message d'erreur complet et réel que MySQL vous donne –

+2

la façon dont vous avez écrit votre requête peut en effet renvoyer plus d'une ligne de la sous-sélection: quelle valeur de correct_platform devrait être prise s'il en existe plusieurs pour un buildID donné? – davek

+0

ce que je veux faire est: pour chaque BuildID à partir des résultats, le comparer avec BuildID dans la construction est même, puis prendre cette correct_platform de la construction et insérer dans platform_to_insert dans Résultats – JPro

Répondre

66

Je ne crois pas que vous ayez besoin d'une sous-requête.

UPDATE results, build 
SET results.platform_to_insert = build.correct_platform 
WHERE results.BuildID = build.BuildID 
+2

Cest génial requête résolu mon problème merci beaucoup –

+0

Wow, réponse génial. Cela change fondamentalement ma compréhension des bases de données relationnelles – Mansiemans

+0

Hii j'ai essayé cette requête, mais ne fonctionne pas correctement pls vérifier: staff_login_times UPDATE, staff_rotas SET staff_login_times.scheduled_start = staff_rotas.startdate OÙ staff_login_times.actual_start = staff_rotas.startdate; – HIR

5

Il y a deux options:

  1. mise à jour vos tables d'utiliser BuildID comme une clé primaire (pour éviter les doublons)
  2. mettre à jour votre sous-requête pour ne renvoyer qu'un seul résultat

    UPDATE results SET results.platform_to_insert = (
        SELECT correct_platform 
        FROM build 
        WHERE results.BuildID=build.BuildID LIMIT 1 
    ); 
    
+0

Je souhaite mettre à jour toutes les lignes dans les résultats – JPro

+0

le problème est que la clause WHERE est correspondant à plusieurs éléments la sous-requête. Cela peut être résolu en limitant le jeu de résultats de la sous-requête à un ou en faisant * .BuildID une clé primaire pour éviter les doublons en premier lieu. Dans les deux cas, toutes les lignes seront mises à jour. – tmpvar

Questions connexes