Объединение 3 столов - PullRequest
2 голосов
/ 14 мая 2011

Во-первых, извините, если это почти достаточно дубликат. Я нашел этот вопрос , который почти делает то, что я хочу, но я не мог понять, как изменить его в соответствии с моими потребностями.

У меня есть эти 3 таблицы:

cs_Accounts:

+----+-----------------------------+-------------+
| id | email                       | username    |
+----+-----------------------------+-------------+
| 63 | jamasawaffles@googlil.com   | jamwaffles2 |
| 64 | jamwghghhfles@goomail.com   | jamwaffles3 |
| 65 | dhenddfggdfgetal-pipdfg.com | dhendu9411  |
| 60 | jwapldfgddfgfffles.co.uk    | jamwaffles  |
+----+-----------------------------+-------------+

cs_Groups:

+----+-----------+------------+-------------+
| id | low_limit | high_limit | name        |
+----+-----------+------------+-------------+
|  1 |         0 |          0 | admin       |
|  2 |         1 |         50 | developer   |
|  3 |        76 |        100 | reviewer    |
|  4 |        51 |         75 | beta tester |
|  5 |         1 |         50 | contributor |
+----+-----------+------------+-------------+

cs_Permissions:

+----+---------+----------+
| id | user_id | group_id |
+----+---------+----------+
|  4 |      60 |        4 |
|  3 |      60 |        1 |
|  5 |      60 |        2 |
|  6 |      62 |        1 |
|  7 |      62 |        3 |
+----+---------+----------+

Я боролся с трехсторонним объединением уже несколько часов, и я не могу получить желаемые результаты. Я ищу это поведение: строка будет возвращена для каждого пользователя из cs_Accounts, где в cs_Permissions есть строка, содержащая их идентификатор и идентификатор группы из cs_Groups, а также группу с group_id имеет high_lmiit и low_limit в диапазоне, который я могу указать.

Используя данные в таблицах выше, мы можем получить что-то вроде этого:

email                         username      cs_Groups.name
----------------------------------------------------------
jwapldfgddfgfffles.co.uk      jamwaffles    admin
jwapldfgddfgfffles.co.uk      jamwaffles    developer
jwapldfgddfgfffles.co.uk      jamwaffles    beta tester
dhenddfggdfgetal-pipdfg.com   dhendu9411    admin
dhenddfggdfgetal-pipdfg.com   dhendu9411    reviewer

Однако есть дополнительное условие. Это условие, когда строки выбираются только в том случае, если группа, к которой принадлежит пользователь, имеет high_limit и low_limit со значениями, которые можно указать с помощью предложения WHERE. Как видите, таблица выше содержит только пользователей со строками в таблице разрешений.

Ответы [ 2 ]

5 голосов
/ 14 мая 2011

Это похоже на домашнюю работу, но с таким именем, как Джеймс, я всегда готов помочь.

select a.email,a.username,g.name
from cs_Accounts a
inner join cs_Permissions p on p.user_id = a.id
inner join cs_Groups g on g.id = p.Group_id
where g.low_limit > 70
and g.high_limt < 120
0 голосов
/ 14 мая 2011

Это запрос

SELECT ac.email, ac.username, gr.name 
FROM cs_Accounts AS ac 
LEFT JOIN cs_Permissions AS per ON per.user_id = ac.id 
INNER JOIN cs_Groups AS gr ON per.user_id = gr.id

Вы можете добавить к этому запросу предложение WHERE, если хотите

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