2013-03-08 4 views
1

J'ai deux tables:insérer MySQL de requête de sélection

table1

| ColumnA | ColumnB | 
----------------------- 
| 123  | 1  | 

TABLEAU2

| ColumnA | ColumnC | 
----------------------- 
| 123  | 20  | 

J'ai modifié le tableau 2 pour ajouter une nouvelle colonne, il ressemble à ce

NOUVEAU TABLEAU

| ColumnA | ColumnC | ColumnB | 
---------------------------------- 
| 123  | 20  | NULL  | 

Maintenant, je veux sélectionner les valeurs de TABLE1.Column B et l'insérer dans TABLE2.Column B

J'ai donc écrit cette requête:

INSERT INTO TABLE2 (ColumnB) 
SELECT t1.ColumnB 
FROM TABLE1 AS t1 
INNER JOIN 
TABLE2 AS t2 
ON t1.ColumnA = t2.ColumnA; 

Mais il ne semble pas faire l'affaire. Est-ce que je manque quelque chose?

+0

Impossible d'insérer/de mettre à jour une table sélectionnée. –

Répondre

5

Vous devez utiliser une instruction UPDATE pour mettre à jour la table. Un INSERT ajoutera de nouvelles lignes.

UPDATE Table2 
JOIN Table1 
ON 
Table2.columnA = Table1.ColumnA 
SET 
Table2.ColumnB = Table1.ColumnB 
WHERE 
Table2.ColumnB IS NULL 
+1

SQL est beau quand c'est juste. –

+0

Merci pour la réponse rapide. Bizarrement, je continue d'avoir une erreur de syntaxe. – Spartanblogger

+0

@Spartanblogger quelle est l'erreur? –

-2

Vous ne semblez pas vouloir insérer. Il semble que vous voulez mettre à jour les lignes déjà dans la table2. Vous pouvez utiliser:

update table2 set ColumbB=(select ColumnB from table1 where table1.ColumnA=table2.ColumnA) 
+0

l'introduction d'une sous-requête ici n'est pas nécessaire, et dans ce cas conduit même à de mauvais résultats. – Hazzit

+0

@Hazzit dans ce cas, je ne crois pas que la requête va même fonctionner, mais si elle le fait chaque ligne aura la même valeur. –

+0

Je sais que ça va tourner parce que je l'ai testé avant de poster la réponse. Une sous-requête n'est jamais la solution la plus rapide, mais elle est souvent la plus facile à comprendre pour quelqu'un qui apprend. – kainaw