2010-03-02 6 views
3

J'ai deux tables ...Remplacer id avec chaîne en mode SQL

groupid membership_list managerid 
------------------------------------- 
0   /0//1//2/   2 
1   /2/    2 

userid username 
------------------ 
0   ben 
1   tom 
2   dan 

Je voudrais afficher une table par exemple l'utilisateur « ben » qui est une liste des groupes auxquels ils membre de qui ressemble à ceci ...

groupid membership_list managername 
--------------------------------------- 
0   /0//1//2/   dan 

.. donc en remplaçant 'manager_id' avec le nom d'utilisateur pour cet id. Je me suis attaqué à ça mais je ne peux pas m'en sortir - mes compétences SQL manquent clairement - comment puis-je faire ça?

SELECT groupid, membership_list, managerid FROM blah WHERE membership_list LIKE '%/?/%' 

... est à peu près aussi loin que j'ai.

Répondre

4
SELECT t1.groupid, t1.membership_list, t2.username 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.managerid = t2.userid 

Cela devrait le faire. Ou suis-je raté quelque chose ici ??

+0

Je ne pense pas que cela fonctionnera. la jointure doit être sur la division de membership_list, vous affichez simplement les informations de gestion, pas les informations d'appartenance pour un utilisateur. –

+0

J'ai un bloc mental bizarre quand il s'agit de jointures, merci marc_s pour avoir souligné l'évidence! :) –

0

SELECT A.groupid, A.membership_list, B.managername DE table1 A, B OU table2 A.managerid = B.userid et membership_list LIKE '% /? /%'

+0

ce qui se passe quand il y a un ID utilisateur de 2, 22, 222, etc votre LIKE va trouver des fausses correspondances –

+0

mcgyver5 probablement obtenu cela de l'instruction select dans ma question. C'est pour l'utilisation dans une vue si le '?' serait remplacé par une valeur avant d'être utilisé. –

0

vous devez sortir membership_list colonne dans une nouvelle table:

changed table: Groups 
groupid 
managerid 

table users 
userid 
username 

new table: UserGroups 
groupid 
userid 

vous pouvez faire ceci:

SELECT 
    * 
    FROM Users     u 
     INNER JOIN UserGroups ug On u.userid=ug.userid 
     INNER JOIN Groups  g ON ug.groupid=g.groupid 
    WHERE u.Name='Ben' 

pour trouver tous les groupes de Ben.

Si vous ne voulez pas modifier vos tables, vous aurez besoin d'une fonction fractionnée qui convertira les multiples valeurs de membership_list en rangées. Vous n'avez pas mentionné la base de données sur laquelle vous travaillez et une fonction de division dépend de cela.