получить запись, имеющую комбинацию столбцов - PullRequest
5 голосов
/ 09 апреля 2019

это мой пример таблицы

CREATE TABLE agentskills 
( 
    id          INT PRIMARY KEY NOT NULL IDENTITY, 
    skilluserid INT, 
    skillid     INT NOT NULL, 
    skilltypeid INT, 
    priority    INT DEFAULT 0 
)

это мой пример данных

INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (1,21,1,1)
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (1,22,1,1)

INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (2,23,1,1)
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (2,24,1,1)

INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (3,21,1,1)
INSERT INTO AGENTSKILLS (skilluserid , skillid, SKILLTYPEID,priority ) VALUES (3,22,1,1)

Здесь 'skilluserid' - это идентификатор пользователя, имеющего навык 'skillid'

как я могу получить пользователей / skilluserid с комбинацией skillid?

например: получить пользователя (ей) с навыками 21 и 22 или 22 и 21 или 21,22,23.любая комбинация, имеющая 21 и 22.

Ответы [ 3 ]

2 голосов
/ 09 апреля 2019

Вы можете использовать агрегацию и having:

select skilluserid
from agentskills
where skillid in (21, 22)
group by skilluserid
having count(distinct skillid) = 2;  -- "2" = size of list in where clause
1 голос
/ 09 апреля 2019

Вы можете использовать пересечение,

select skilluserid
from agentskills 
where skillid =21

INTERSECT

select skilluserid
from agentskills 
where skillid =22
1 голос
/ 09 апреля 2019

вы можете использовать существовать, если вам нужен весь столбец в выделении

select t1.* from agentskills t1
where  exists ( select 1 from agentskills t2 where t1.skilluserid=t2.skilluserid
                 and skillid in (21, 22) 
                 having count(distinct skillid) = 2
            ) and skillid in (21, 22)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...