2017-06-22 1 views
0

J'ai un tableau Produit qui a un champ fabricant. Le champ fabricant est actuellement de type VARCHAR.MySQL insérer dans la table en sélectionnant des données d'une autre table

je pensais qu'il valait mieux créer une table Fabricant et modifier le produit table pour inclure un MANUFACTURER_ID champ qui bien sûr sera une clé étrangère faisant référence Manufacturer.id

Donc, pour migrer les données que je veux insérer dans le nouveau champ Product.manufacturer_id le id du Fabricant dont le nom correspond à l'actuel Champ Product.manufacturer.

Je vais avoir des problèmes la migration des données en utilisant la requête suivante:

INSERT INTO Product (manufacturer_id) 
    SELECT m.id FROM Manufacturer AS m WHERE m.name = 
    SELECT p.manufacturer FROM Product AS p WHERE p.manufacturer = m.name; 

Quelqu'un peut-il me montrer où je vais mal?

+0

Une réponse ci-dessous ressemble à ce que vous cherchez. Mais si vous avez encore des difficultés, voir: [Pourquoi devrais-je fournir un MCVE pour ce qui me semble être une requête SQL très simple?] (Https://meta.stackoverflow.com/questions/333952/why-should- i-fournir-un-mcve-pour-ce-qui-me-semble-à-être-un-très-simple-sql-query) – Strawberry

Répondre

4

Vous voulez update, pas insert:

update p 
    set manufacturer_id = m.id 
    from product p join 
     manufacturer m 
     on p.manufacturer = m.name; 

ci-dessus est la syntaxe SQL Server (ne sais pas pourquoi je l'ai fait, la question est clairement MySQL étiqueté). La syntaxe MySQL correcte est:

update product p join 
     manufacturer m 
     on p.manufacturer = m.name 
    set p.manufacturer_id = m.id; 
+0

Merci pour votre réponse et pour m'avoir mis sur la bonne voie. Je n'ai pas réussi à faire fonctionner la requête ci-dessus mais les choses suivantes ont été triées: ** UPDATE Produit p INNER JOIN Fabricant m sur p.manufacturer = m.name SET p.manufacturer_id = m.id; ** – user1061799