2011-11-27 3 views
2

J'ai lu toutes les questions ici mais je ne comprends toujours pasautre ON DUPLICATE KEY UPDATE requête

J'ai deux tables identiques d'une taille considérable. Je voudrais mettre à jour la table packages_sorted avec les données de packages_sorted_temp sans détruire les données existantes sur packages_sorted

Table packages_sorted_temp contient des données sur seulement 2 colonnes db_id et quality_rank

Table packages_sorted contient des données sur les 35 colonnes, mais quality_rank est 0

La clé primaire sur chaque table est db_id et c'est ce que je veux déclencher le ON DUPLICATE KEY UPDATE avec.

Essentiellement comment je fusionne ces deux tables par et change packages_sorted. quality_rank de 0 à l'quality_rank stocké dans packages_sorted_temp sous la même clé primaire

est ici ce qui ne fonctionne

INSERT INTO `packages_sorted` (`db_id` , `quality_rank`) 
SELECT `db_id` , `quality_rank` 
FROM `packages_sorted_temp` ON DUPLICATE 
KEY UPDATE `packages_sorted`.`db_id` = `packages_sorted`.`db_id` 
+1

Est-ce lié à php? c'est-à-dire fonctionne-t-il à partir de workbench MySQL et non de php? si oui, la balise php peut être supprimée – melihcelik

Répondre

3
update packages_sorted , packages_sorted_temp 
set packages_sorted.quality_rank = packages_sorted_temp.quality_rank 
where packages_sorted.db_id = packages_sorted_temp.db_id 
+0

@MGA Je viens de réaliser que le SQL précédent ne fonctionne pas sur mysql. Je suis à peu près certain que cela fonctionne sur Oracle. Donc, j'ai corrigé ceci pour le format mysql. –

+0

Ok Toujours + 1, désolé pour cela, mais n'avez-vous pas besoin de rejoindre les deux tables? –

+0

oui, mais j'utilise 'where' au lieu de 'jointure interne'. –

2

Vous pouvez utiliser Update se joindre comme ceci:

Update packages_sorted p 
    inner join packages_sorted_temp temp 
    on p.db_id = temp.db_id 
set p.db_id = temp.db_id, p.quality_rank = temp.quality_rank 
Questions connexes