Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Levando em conta a estrutura:
TAB PERGUNTAS
id
pergunta
TAB RESPOSTAS
id
codigo_pergunta
resposta
qr = "SELECT * FROM Respostas RIGHT JOIN Perguntas ON Respostas.codigo_pergunta = Perguntas.id"
Isso me retorna os registros da tabela a direita(Perguntas) independentemente da tabela da esquerda(Respostas) ter registros ou naum.
Ou seja, se eu tiver 5 perguntas, e apenas 3 tiverem respostas, ele vai trazer as 5 perguntas mesmo assim.
A pergunta é: COMO FAÇO PARA RETORNAR SOMENTE OS REGISTROS DA TABELA PERGUNTAS QUE NÃO TENHA REGISTRO NA TAB RESPOSTAS. Ou seja, somente as perguntas sem respostas.
Num sei mais o q fazer galera..
Obrigado a todos.
Att.
Aguinaldo
complementando o sql do Marião
SELECT * FROM perguntas p WHERE NOT EXISTS(SELECT 1 FROM respostas r WHERE r.codigo_pergunta = p.id)
>
complementando o sql do Marião
SELECT * FROM perguntas p WHERE NOT EXISTS(SELECT 1 FROM respostas r WHERE r.codigo_pergunta = p.id)
Perfeito, num precisei mudar uma "vírgula"!
Gostaria de entender melhor o código, alguém se habilita?
Obrigado a todos pela ajuda.
Att.
Aguinaldo
traduzindo para o português:
selecionar todas as colunas da tabela pergunta que não tenham registros na tabela respostas. Se você quiser somente as perguntas que tiveram respostas retire o NOT para tornar a condição verdadeira
A grande jogada está no where da where da condição EXISTS. Ao relacionar as duas tabelas através das colunas r.codigo_pergunta = p.id obtemos o resultado desejado. No SELECT 1 poderia ser SELECT nomedocampo, mas é desnecessário atribuir um valor muito onde o EXISTS necessita de um valor boleano(True = 1 ou False = NULL)
na verdade nem o LEFT JOIN nem no caso usado o RIGHT JOIN resolverá o seu caso
mas pode fazer com uma subquery
SELECT * FROM PERGUNTAS WHERE PERGUNTAS.id NOT IN (SELECT codigo_pergunta FROM RESPOSTAS)