2009-06-26 11 views
1

J'ai un produits de la table où l'une des colonnes sont relatedproducts. relatedproducts contient des chaînes d'identifiants de produit concaténés (produit de colonne) séparées par deux points, par ex. abc-123: foo-prod: ada69, etc. En raison d'une mauvaise conception, il se peut qu'un produit soit retiré de la table des produits et soit toujours référencé dans la colonne relatedproducts. J'ai donc besoin d'une requête sql qui passe par toutes les lignes de la table des produits, vérifie la colonne relatedproducts en explosant les données (d'où l'éclatement du titre) et voit si chaque produit référencé existe dans la même table de produits. Cependant, je suis novice en SQL et j'ai du mal à écrire la requête join/regexp pour cela.MySQL joindre basé sur regexp

Toute aide sera appréciée!

+2

Pourquoi avez-vous des chaînes concaténé relatedproducts? Il serait plus facile à gérer si vous répertoriez chaque produit associé séparément sous un ID de produit connexe commun. –

Répondre

3

MySQL peut correspondre à regexp, mais ne peut malheureusement pas retourner la sous-chaîne correspondante.

Tu ferais mieux de le faire en utilisant FIND_IN_SET:

SELECT * 
FROM products p 
JOIN product rel 
ON  FIND_IN_SET(rel.id, REPLACE(p.related, ':', ','))