Consulta SQL - Filtrar campo através de outra coluna

1 resposta
querysqlsqlserver
O

Olá, pessoal.

Preciso de uma ajuda.

Tenho duas tabelas.
Tabela 1: Pessoas
Tabela 2: Eventos
Ambas possuem a chave: Pessoa_ID

A tabela 2 possui a seguinte estrutura:

Pessoa_ID | Pessoa_Nome | Evento
1 | João Silva | 1
1 | João Silva | 2
1 | João Silva | 3
1 | João Silva | 4
2 | Roberto Vieira | 1
2 | Roberto Vieira | 3
3 | Alex Carvalho | 1
3 | Alex Carvalho | 3
3 | Alex Carvalho | 4

O que eu preciso é o seguinte: que na minha consulta (a partir da tabela 1), não traga nenhuma pessoa que tenha o evento 2.
Ou seja, nesse caso em específico, não posso trazer o João Silva.

Através do “NOT IN” não dá certo. Ao fazer NOT IN = 2, o João continua vindo, pois ele também possui eventos diferentes de 2.

Tentei utilizar também o NOT EXISTS, conforme abaixo, porém não deu certo, o resultado veio NULO.
not exists (select * from Eventos E where E.Evento = 2).

Alguém tem alguma ideia?
Desde já, agradeço!

1 Resposta

W

Especificamente com SQL Server eu não consigo te ajudar, mas eu achei uma query que, pelo menos, pode te dar uma luz.

CREATE TABLE Pessoas(
  Pessoa_ID INT AUTO_INCREMENT PRIMARY KEY,
  Pessoa_Nome VARCHAR(40)
);

CREATE TABLE Eventos(
  Pessoa_ID INT,
  Evento INT,
  FOREIGN KEY (Pessoa_ID) REFERENCES Pessoas(Pessoa_ID)
);

INSERT INTO Pessoas(Pessoa_Nome) VALUES ('João Silva'), ('Roberto Vieira'), ('Alex Carvalho');
INSERT INTO Eventos(Pessoa_ID, Evento)
VALUES (1, 1), (1, 2), (1, 3), (1, 4),
       (2, 1), (2, 3), (3, 1),
       (3, 3), (3, 4);

SELECT
  p1.Pessoa_ID,
  p1.Pessoa_Nome,
  e1.Evento
FROM Pessoas p1
JOIN Eventos e1 ON p1.Pessoa_ID = e1.Pessoa_ID
WHERE NOT EXISTS (
  SELECT 1
  FROM Eventos e2
  WHERE e2.Pessoa_ID = e1.Pessoa_ID AND e2.Evento = 2
);

Me baseei nesta resposta: https://dba.stackexchange.com/a/303708

Criado 15 de junho de 2022
Ultima resposta 15 de jun. de 2022
Respostas 1
Participantes 2