Замените id на строку в представлении SQL - PullRequest
3 голосов
/ 02 марта 2010

У меня есть две таблицы ...

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

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

Я хотел бы отобразить таблицу, например, для пользователя 'ben', которая представляет собой список групп, членом которых они являются, и выглядит следующим образом ...

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

.. поэтому, в основном, заменив 'manager_id' именем пользователя для этого идентификатора. Я взломал это, но я не могу решить - мои навыки SQL явно немного не хватает - как я могу это сделать?

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

... примерно столько, сколько у меня есть.

Ответы [ 3 ]

4 голосов
/ 02 марта 2010
SELECT t1.groupid, t1.membership_list, t2.username
FROM table1 t1
INNER JOIN table2 t2 ON t1.managerid = t2.userid

Это должно сделать это. Или я что-то здесь упускаю ??

0 голосов
/ 02 марта 2010

вам нужно разбить столбец members_list на новую таблицу:

changed table: Groups
groupid
managerid

table users
userid
username

new table: UserGroups
groupid   
userid  

Вы можете сделать это:

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'

чтобы найти все группы Бена.

Если вы не хотите изменять свои таблицы, вам понадобится функция разбиения, которая преобразует несколько значений из members_list в строки. Вы не упомянули фактическую базу данных, над которой работаете, и функция разбиения зависит от того, что вы это знаете.

0 голосов
/ 02 марта 2010

SELECT A.groupid, A.membership_list, B.managername FROM table1 A, table2 B WHERE A.managerid = B.userid и members_list LIKE '% /? /%'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...