2010-05-03 1 views
1

Dans une table, il y a une colonne qui contient ids séparés par des virgules ex: « 159167 »MySQL: Utilisation du coma séparé ids dans une colonne de table et group_concat

Je veux faire l'équivalent d'une jointure entre cette table et la table qui contient ces identifiants.

ex:

TableA    TableB 
id desc   id desc tableAids stock 
1 test1   1 abc 1,2,3  1 
2 test2   2 def 1,2  0 
3 test3   3 ghi 3,4  10 
4 test4 

Comment puis-je joindre les deux tables avec une requête? J'ai exploré la fonction group_concat() mais elle renvoie une chaîne que je ne peux pas mettre dans une clause IN.

Ce que je suis en train de faire est quelque chose comme ceci:

Select a.desc from TableA a 
LEFT JOIN TableB b on a.id = b.tableAids 
WHERE b.stock > 1 

Répondre

1

J'ai une solution pour votre question, mais:

  • vous devriez sérieusement envisager un refactoring pour se débarrasser de la coma séparé ids

  • la solution fait ce que vous avez besoin en ce moment, mais il ne peut pas être optimisé (mysql peut ne pas utiliser des index pour l'exécution accélérer, voir ci-dessous)

Essayez ceci:

select a.desc 
from TableA a 
inner join TableB b on find_in_set(a.id, b.tableAids) > 0 
where b.stock > 1; 

Mysql ne peut pas utiliser les index pour joindre les tables parce que les colonnes de la condition de jointure sont inclus dans une fonction . Cependant, si vous avez un index sur la colonne TableB.stock, cela pourrait aider un peu. Rappelez-vous: stocker plusieurs valeurs dans une colonne est un gros NO-NO et vous devriez vous en débarrasser dès que possible. Cela causera beaucoup de maux de tête plus tard.

+0

merci je vais essayer tout de suite. Je sais que je devrais refactoriser mais le refactoring prendrait trop de temps et nous n'avons pas le budget. Moi-même, je poussais pour la solution de refactoring mais je ne suis pas le décideur dans ce cas. Merci encore. –

Questions connexes