Как соединения должны использоваться в MySQL? - PullRequest
4 голосов
/ 09 октября 2010

Если у меня есть две таблицы, такие как

таблица пользователей- "u"

userid | name
 1     |  lenova
 2     |  acer
 3     |  hp

проходной стол - "р"

userid | password
 1     | len123
 2     | acer123
 3     | hp123

поскольку, как я узнал из уроков, я могу объединить эти 2 таблицы, используя множество соединений, доступных в mysql как сказано здесь

Если у меня есть таблица типа

таблица ролей - "r"

roleid | rname
 1     | admin
 2     | user
 3     | dataanalyst

таблица токенов - "t"

tokenid| tname
 1     | xxxx
 2     | yyyy
 3     | zzzz

Таблица терпимости_сообщений- "а"

roleid | tokenid
 1     |  1
 1     |  2
 3     |  1
 3     |  3
 3     |  1

Я должен сделать соединение таким образом, чтобы отображать таблицу, соответствующую Как это "rolename" имеет все эти токены. Как это сделать? Я сбит с толку. Можно ли сделать соединение? Мне очень нравится MySQL. Я хочу играть с запросами, которые не играют. Я хочу выздороветь. Любые предложения, пожалуйста?

1 Ответ

1 голос
/ 09 октября 2010

Проще всего увидеть, когда имена столбцов, которые должны быть объединены, имеют одинаковые имена:

SELECT r.rname,
       t.tname
  FROM ROLE r
  JOIN ROLE_TOKEN_ASSOCIATION rta ON rta.roleid = r.roleid
  JOIN TOKEN t ON t.tokenid = rta.tokenid

Это вернет только роли с ассоциированными токенами.Если у вас есть роль, с которой не связан токен, вам нужно использовать OUTER соединение, например:

   SELECT r.rname,
          t.tname
     FROM ROLE r
LEFT JOIN ROLE_TOKEN_ASSOCIATION rta ON rta.roleid = r.roleid
     JOIN TOKEN t ON t.tokenid = rta.tokenid

Эта ссылка может помочь - это визуальное представление JOIN .

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