Bom pessoal, estou enferrujado em montar querys, a maioria dos locais em que trabalhei as querys já chegavam prontas, eu só fazia consultas simples para testar e tal.
Mas agora caiu uma no meu colo, que vou tentar explicar aqui para ver se vcs podem me auxiliar.
Imaginem que as letras sejam entidades e que as setas sejam a/ relações possíveis(joins) para chegar até a entidade mais distante do modelo:
A->B->C->D
Eu quero todos os elementos de A que não tenham qualquer relação com D, sendo que em D eu posso ter 0 ou N elementos de C, e C possa ter 0 ou 1 em D.
Ou seja, quero todos os elementos de A em que C não tenha registro em D.
Alguém arrisca?
SELECT COLUNAS_QUE_TU_QUER FROM A // SELECIONA COLUNAS
INNER JOIN B
ON A.ID=B.ID //ONDE A ESTEJA RELACIONADO COM B
INNER JOIN C
ON C.ID = B.ID // E B ESTEJA RELACIONADO COM C
WHERE C.ID NOT IN( SELECT ID FROM D); // E C NÃO ESTEJA EM D
SELECT COLUNAS_QUE_TU_QUER FROM A // SELECIONA COLUNAS
INNER JOIN B
ON A.ID=B.ID //ONDE A ESTEJA RELACIONADO COM B
INNER JOIN C
ON C.ID = B.ID // E B ESTEJA RELACIONADO COM C
WHERE C.ID NOT IN( SELECT ID FROM D); // E C NÃO ESTEJA EM D [/quote]
Acho que é por ai sim amigo. Estou seguindo esta linha:
…
left join c on b.id = c.id
where c.FK_ID_DE_B is null