MYSQL: как вернуть значение из столбца, который имеет отношение к значениям в другом столбце - PullRequest
0 голосов
/ 25 мая 2018

Я изо всех сил пытаюсь сформулировать это, не говоря уже о выполнении в MYSQL.Как вернуть userId X, где userId.X и licenseId в (1,2,3,4,5,6,7,8)?

В приведенном ниже примере должно возвращаться 6.

MariaDB [mailserver]> select * from user2permission;
+--------------+--------+
| permissionId | userId |
+--------------+--------+ 
|            1 |      5 |
|            1 |      6 |
|            2 |      6 |
|            2 |      7 |
|            3 |      6 |
|            4 |      6 |
|            5 |      6 |
|            6 |      6 |
|            7 |      6 |
|            8 |      6 |
+--------------+--------+

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Этот тип запроса может быть написан с использованием предложения Group By и с учетом экземпляра согласно фильтрации, примененной в предложении where

SELECT userId
FROM user2permission 
WHERE permissionId  IN (1,2,3,4,5,6,7,8)
GROUP BY userId 
HAVING COUNT(*) = 8
0 голосов
/ 25 мая 2018

Вы хотите показать только пользователей, у которых есть запись для всех необходимых разрешений.На ум приходят два решения:

select *
from users
where userid in (select userid from user2permission where permissionid = 1)
  and userid in (select userid from user2permission where permissionid = 2)
  ...

и

select userid,
from user2permission
group by userid
having count(case when permissionid = 1 then 1 end) > 0
   and count(case when permissionid = 2 then 1 end) > 0
   ...

И когда я говорю «прыгнуть», я имею в виду именно это = без долгих размышлений :-) Решение агрегации Ризваначто вы должны использовать.

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