J'ai donc une table product_supplier à laquelle j'ai besoin d'ajouter des données depuis import_tbl. Product_supplier a trois colonnes product_id, supplier_id et price. Import_tbl a les mêmes colonnes plus un peu plus. Ce qui est le plus important et ce que je n'arrive pas à faire, c'est que lorsqu'une combinaison spécifique de product_id et supplier_id existe, seul le prix doit être mis à jour. Si cette combinaison n'existe pas, une nouvelle ligne doit être ajoutée. J'ai essayé cette requêteInsérer avec une mise à jour de clé en double ignore l'index
INSERT INTO product_supplier (product_id, supplier_id, price)
SELECT i.product_id, i.supplier_id, i.price
FROM import_tbl i
ON DUPLICATE KEY UPDATE
price = i.price
Celui-ci fonctionne si j'ajoute une ligne avec une nouvelle product_id, mais il ignore totalement la supplier_id. Donc, il ne sera pas ajouter de nouvelles lignes si une ligne utilise le même id_produit mais un fournisseur différent.
Je pense que cela a quelque chose à voir avec les index, et j'ai essayé des index uniques pour à la fois product_id, et supplier_id et un index à plusieurs colonnes de product_id et supplier_id. Mais quand je mets EXPLAIN devant la requête, il ne reconnaît jamais les index. S'il vous plaît, aidez, merci!
Tableau structure product_supplier
+---------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------+------+-----+---------+----------------+
| product_supplier_id | int(11) | NO | PRI | NULL | auto_increment |
| product_id | int(11) | NO | UNI | 0 | |
| supplier_id | int(11) | NO | MUL | 0 | |
| price | int(11) | NO | | 0 | |
+---------------------+---------+------+-----+---------+----------------+
pouvez-vous inclure la structure de la table pour product_supplier? –
J'ai ajouté la structure de la table pour product_supplier –
Votre instruction select n'a aucun sens. En l'absence d'un ordre explicite par, la valeur du prix ne sera pas déterministe et cessera de conserver toute association avec les autres attributs. Mais ceci est sans objet puisque vous n'avez pas de clé primaire ou unique qui est remplie à partir du select. Nous ne pouvons pas résoudre ce problème parce que nous ne savons pas ce que les données signifient/d'où elles proviennent et vous n'avez donné aucun exemple d'entrée et de sortie. – symcbean