Consulta SQL em 3 tabelas ao mesmo tempo

oi,
eu estou fazendo um site com sistema de noticias,
tenho uma tabela noticia, outra usuario, outra comentario,
todas com chave estrangeira e chave priomária,
por exemplor a tabela noticia tem um campo com o id do usuario,
a tabela comentario tem um campo com o id da noticia.

quero saber se da pra fazer o seguinte:
em uma consulta obter todas as noticias do banco de dados, puxando tbm o nome do usuario e além disso que tbm retorne a quantidade de comentarios que uma noticia tem.

eu ja consegui obter o nome do usuario, só falta essa parte da quantidade de comentarios que tenham o mesmo id_noticia que a cada linha da tupla…

SELECT n.id_noticia, u.nome, TO_CHAR(n.datahora, ‘DD/MM/YYYY’) AS data, TO_CHAR(n.datahora, ‘HH24:MI:SS’) AS hora, SUBSTR(n.conteudo, 1, 350), u.foto, u.orkut FROM principal.noticia n JOIN principal.usuario u USING (id_usuario)

ja vasculhei uns livros e não consegui entender ainda, não sei se tenho que fazer uma subconsulta ou é um novo join, sei lá!

Agradeço desde já pela ajuda! valeu!

aqui ta os esquema das tabelas pra ajudar:

[principal.noticia]
id_noticia
id_usuario
datahora
conteudo

[principal.usuario]
id_usuario
nome
senha
foto
orkut

[principal.comentario]
id_comentario
id_noticia
id_usuario
datahora
nome
email
conteudo

O código depende muito do banco… vou postar 2 que funcionam no Oracle

select n.id_noticia, u.nome as autor, count(c.id_comentario) as qtd_comentarios, [O resto do que você quiser aqui] from principal.noticia n, principal.usuario u, principal.comentario c where n.id_usuario = u.id_usuario and n.id_noticia = c.id_noticia group by n.id_noticia, u.nome, c.id_comentario, [O resto]

select n.id_noticia, u.nome as autor, count(c.id_comentario) as qtd_comentarios, [O resto do que você quiser aqui] from principal.noticia n inner join principal.usuario u on n.id_usuario = u.id_usuario inner join principal.comentario c on n.id_noticia = c.id_noticia group by n.id_noticia, u.nome, c.id_comentario, [O resto]
Não lembro muito bem da sintaxe do group by, se vai só o c.id_comentario, ou se vai todos que tiverem no select. Tenho quase certeza que é a segunda opção.

Boa noite Colegas !

Que banco de dados você esta usando ?

Você quer que no resultado da consulta apareca uma coluna com o total de comentários de uma notícia ?

Em MySql e Oracle, acho que seria algo mais ou menos assim:

SELECT n.idNoticia,
            u.Nome,
            c.total
FROM noticia n, 
         usuario u,
(Select idNoticia, count(*) total
 from comentario
 group by idNoticia) c
where n.idUsuario = u.idUsuario and
          n.idNoticia = c.idNoticia;

Acrescentanto os demais campos de usuario e noticia que você queira.

[]s

bá, valeu gurizada,
vou testar agora,
eu tava pesquisando aqui e já tava chegando perto do que vcs colocaram!

to usando o PostgreSQL.

eu quero que na linha da consulta apareça os os campos da notícia, os campos do usuario que postou a notícia (para que eu posso pegar o nome dele) e que tbm apareça um campo com o total de comentários para a notícia em questão (ou seja, para cada linha da tupla que resultar a consulta)

vlw, ja volto

dae, boa noite gente,
consegui, funcionou

SELECT n.id_noticia, u.nome, c.total FROM principal.noticia n, principal.usuario u, (Select id_noticia, count(*) AS total from principal.comentario group by id_noticia) c where n.id_usuario = u.id_usuario and n.id_noticia = c.id_noticia

agora só falta uma coisa… eu entender esse código,
eu tava pensando a consulta interna retorna uma tupla,
e a linha dessa tupla é relacionada com o id da noticia dentro do where… entendi (era uma coisa bem óbvia)
até q é fácil.

valeu por tudo gente.
até mais!