2017-09-17 2 views
0

Comment puis-je mettre à jour la colonne pour la même table avec cette requête:mise à jour MySQL sélection à partir d'une même table

update products 
set (related_product_id) = 
(
select GROUP_CONCAT(id) from products 
INNER JOIN products_cross on products_cross.product_upc = products.upc 
WHERE products_cross.related_product_upc = 2631695 
) 

PRODUITS table avant:

id | upc | related_product_id | 
3721 | 2631695 |      | 
4566 | 37262 |      | 
3723 | 173615 |      | 
3724 | 216571 |      | 
table PRODUITS

après:

id | upc | related_product_id | 
3721 | 2631695 | 4566,3723,3724  | 
4566 | 37262 |      | 
3723 | 173615 |      | 
3724 | 216571 |      | 

PRODUITS table CROSS:

product_upc | related_product_upc | 
37262  | 2631695    | 
173615  | 2631695    | 
216571  | 2631695    |   
+0

Ce que vous essayez de mettre à jour.Sur quelle base. S'il vous plaît expliquer – Arora20

+0

Fournissez vos définitions de table pour mieux comprendre votre schéma –

+0

Je ne voulais pas imploser des produits ID basés sur une autre table (products_cross). Non, la requête actuelle ne fonctionne pas: "Vous ne pouvez pas spécifier la table cible 'lc_products' pour la mise à jour dans la clause FROM" ou "# 1064 - Vous avez une erreur dans votre syntaxe SQL, consultez le manuel correspondant à votre version du serveur MariaDB pour la bonne syntaxe à utiliser près de '(related_product_id) = ( ) Sélectionnez GROUP_CONCAT (id) à partir des produits INNER JOIN' à la ligne 2 – JoeDoe

Répondre

0

pourrait être quelque chose comme ci-dessous

update products p1 
join (
    select c.related_product_upc ,GROUP_CONCAT(product_upc) related_products 
    from products p 
    join products_cross c on c.related_product_upc = p.upc 
    where c.related_product_upc = 2631695 
    group by c.related_product_upc 
) t on(t.related_product_upc = p1.upc) 
set p1.related_product_id = t.related_products; 

DEMO

Note: le stockage de produits connexes comme des valeurs séparées par des virgules est une mauvaise conception à la place, vous pouvez créer une nouvelle table et rapporter vos produits afin que chaque relation sera stocké comme une seule ligne

related_products 

product_id related_product_id 
3721  4566 
3721  3723 
3721  3724