Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dilonghi

[Resolvido] Select em duas tabelas

Recommended Posts

vi muitos post desse assunto, mas estou com dificuldade, pois meu modelo é um pouco diferente.

 

Tenho duas tabelas, IMOVEIS e FOTOS, sendo que na tabelas FOTOS, tenho varios registros para cada IMOVEL.

Então meu problema é Listar em um Gridview os imoveis, basedo em uma busca, e mostrar junto uma unica foto.

 

Usando INNER JOIN, ou LEFT JOIN, ele me retorna os imoveis, conforme o nº de fotos que tem no cadastro,

só que preciso que este Select, me retorne uma vez o só o Imovel com Uma foto.

 

Criei em FOTOS um campo chamado: 'principal', sendo que se este estiver marcado como true, retorna junto com os dados do IMOVEL.

 

Alguma luz nessa situação?

 

Detalhes: ASP.NET em C# com SQL server

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif SQL Server

 

Nao entendi porque foi movido.

Acredito que nao seja um problema de SQL SERVER, pois to fazendo meu Select no codigo .cs da página, que alimenta um Gridview por um Reader, pedaço do codigo

 

SqlConnection oConn = null;
SqlCommand oComm;
SqlDataReader oReader;
tring sSQL;
string connStr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;

sSQL = "SELECT IMOVEIS.idimovel, IMOVEIS.tipoimovel, IMOVEIS.domitorios, IMOVEIS.endereco, IMOVEIS.bairro, IMOVEIS.valor, IMOVEIS.datacadastro, IMOVEIS.status, IMO_FOTOS.imagem  FROM IMOVEIS LEFT JOIN IMO_FOTOS  ON (IMOVEIS.idimovel = IMO_FOTOS.idimovel)  WHERE IMO_FOTOS.principal = 1 " + QueryCodigo + QueryImovel + Querydormi + QueryPreco + QueryBairro + " ORDER BY datacadastro desc";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite dilonghi, o bruno ta certo, com SQL você resolve seu problema.

Você pode fazer assim exemplo.

SELECT idimovel, tipoimovel, domitorios, endereco, bairro, valor, datacadastro, status, (SELECT Top(1) imagem FROM IMO_FOTOS WHERE (idimovel = IMOVEIS.idimovel) AND (principal = 1) ) AS Foto
Vê ai acho que desse jeito ai resolve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite dilonghi, o bruno ta certo, com SQL você resolve seu problema.

Você pode fazer assim exemplo.

SELECT idimovel, tipoimovel, domitorios, endereco, bairro, valor, datacadastro, status, (SELECT Top(1) imagem FROM IMO_FOTOS WHERE (idimovel = IMOVEIS.idimovel) AND (principal = 1) ) AS Foto
Vê ai acho que desse jeito ai resolve.

 

 

Interessante o esquema do Select dentro do Select, ate tentei procurar mais exemploas na net, mas meu caso ta complicado.

Usando o teu Codigo da o seguinte erro:

 

Invalid column name 'idimovel'.

Invalid column name 'tipoimovel'.

Invalid column name 'domitorios'.

Invalid column name 'endereco'.

Invalid column name 'bairro'.

Invalid column name 'valor'.

Invalid column name 'datacadastro'.

Invalid column name 'status'.

The multi-part identifier "IMOVEIS.idimovel" could not be bound.

 

alguma ideia de como proseguir dentro dessa logica?

Aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta como ficou o SQL completo:

Tem q ficar tipo assim

SELECT idimovel, tipoimovel, domitorios, endereco, bairro, valor, datacadastro, status, (SELECT Top(1) imagem FROM IMO_FOTOS WHERE (idimovel = IMOVEIS.idimovel) AND (principal = 1) ) AS Foto FROM IMOVEIS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta como ficou o SQL completo:

Tem q ficar tipo assim

SELECT idimovel, tipoimovel, domitorios, endereco, bairro, valor, datacadastro, status, (SELECT Top(1) imagem FROM IMO_FOTOS WHERE (idimovel = IMOVEIS.idimovel) AND (principal = 1) ) AS Foto FROM IMOVEIS

Nao sei o que tinha feito de errado antes que tava dando erro.

 

Porem com agora funcinou em partes, não esta mais gerando erros no SELECT, mas nao estou conseguindo recuperar a Foto la no Gridview.

Se adiciono o meu ImageField, com a propriedade DataImageUrlField="imagem"

da erro: Não foi encontrado campo ou propriedade com o nome 'imagem' na fonte de dados selecionada.

 

saberia por que isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que um alias na tabela de fora resolveria o caso...

 

Bahh galera agredeço de verdade a ajuda, agora ficou 100%.

Alterei ali o AS Foto por AS imagem (nome do campo q precisava retorna) ai nao da mais o erro.

Na real não entendi bem pq, mas funcionou...

 

ficou assim:

SELECT idimovel, tipoimovel, domitorios, endereco, bairro, valor, datacadastro, status, (SELECT Top(1) imagem FROM IMO_FOTOS WHERE (idimovel = IMOVEIS.idimovel) AND (principal = 1) ) AS imagem FROM IMOVEIS

 

 

abraços a todos q ajudaram.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos entender

(SELECT Top(1) imagem FROM IMO_FOTOS WHERE (idimovel = IMOVEIS.idimovel) AND (principal = 1) ) AS imagem

esse final "AS nome" é o nome que será dado ao resultado do select, ou seja era Foto por isso deu erro se você tivesse setado DataImageUrlField="Foto" não teria dado erro nenhum.

Esse AS é pra renomar campos como em SELECT idimovel as IM, tipoimovel AS ti, você teria no seu GRID IM ao inves de idimovel e teria ti ao inves de tipoimovel.

sacou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos entender

(SELECT Top(1) imagem FROM IMO_FOTOS WHERE (idimovel = IMOVEIS.idimovel) AND (principal = 1) ) AS imagem

esse final "AS nome" é o nome que será dado ao resultado do select, ou seja era Foto por isso deu erro se você tivesse setado DataImageUrlField="Foto" não teria dado erro nenhum.

Esse AS é pra renomar campos como em SELECT idimovel as IM, tipoimovel AS ti, você teria no seu GRID IM ao inves de idimovel e teria ti ao inves de tipoimovel.

sacou

 

Perfect.... o alias tb ajuda na performance http://forum.imasters.com.br/public/style_emoticons/default/devil.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Vamos entender

(SELECT Top(1) imagem FROM IMO_FOTOS WHERE (idimovel = IMOVEIS.idimovel) AND (principal = 1) ) AS imagem

esse final "AS nome" é o nome que será dado ao resultado do select, ou seja era Foto por isso deu erro se você tivesse setado DataImageUrlField="Foto" não teria dado erro nenhum.

Esse AS é pra renomar campos como em SELECT idimovel as IM, tipoimovel AS ti, você teria no seu GRID IM ao inves de idimovel e teria ti ao inves de tipoimovel.

sacou

 

Perfect.... o alias tb ajuda na performance http://forum.imasters.com.br/public/style_emoticons/default/devil.gif

 

 

Muito bomm.. Entendi sim. agora dei um Level Up no desenvolvimento..

valeu Ivan e Junior, pela força.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.