Preciso de ajuda com a seguinte tarefa (desistir depois de algumas horas)
CREATE TABLE #cities (cityId INT, city VARCHAR(100));
INSERT INTO #cities (cityId, city)
VALUES (1, 'Metropolis A'),
(2, 'Town B'),
(3, 'Village C');
CREATE TABLE #assignements (assignmentID INT, cityId INT, desciption VARCHAR(100));
INSERT INTO #assignements (assignmentID, cityId, desciption)
VALUES (1, 1, 'Test Alpha Metropol'),
(1, 2, 'Test Alpha Town'),
(1, 3, 'Test Alpha Village'),
(2, 1, 'Test Beta Metropol');
INSERT INTO #assignements (assignmentID, cityId, desciption)
VALUES (2, 3, 'Test Beta Village');
Eu preciso de uma consulta, que me retorne todos os IDs de atribuição associados a #cidades (fácil :-)), mas liste apenas as cidades que são usadas em TODOS os IDs de atribuição.
No exemplo acima, devo retornar após o primeiro INSERT
apenas
assignmentID city
1 'Metropolis A'
2 'Metropolis A'
já que a cidade e a vila são usadas apenas uma vez (mas existem dois IDs de atribuição diferentes)
Após o segundo INSERT
deve retornar
assignmentID city
1 'Metropolis A'
2 'Metropolis A'
1 'Village C'
2 'Village C'
porque o Village C agora também está atribuído a ambos os assignIDs.
Quando eu faria
INSERT INTO #assignements (assignmentID, cityId, desciption)
VALUES (3, 2, 'Test Gamma Town');
a consulta não deve retornar nenhuma linha, porque não há cidade, que é atribuída a todos os três IDs de atribuição (Alfa, Beta e Gama).
É claro que este exemplo é simplificado, na realidade pode haver qualquer número de cidades atribuídas a (atualmente) até 11 IDs de atribuição
Você pode tentar algo como: