Select em duas tabelas

04/03/2010

2

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.


Segue pedaço do codigo que to usando:

SqlConnection oConn = null;
SqlCommand oComm;
SqlDataReader oReader;
string 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";

Alguma luz nessa situação?

Detalhes: ASP.NET em C# com SQL server
Responder

Posts

  Diego, neste caso somente uma foto por imóvel deve estar marcada como principal, isto está ocorrendo na tua base de dados ?
Responder

04/03/2010

Diego Longhi

ola acabei resolvendo com essa SQL:

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

Agradeço a Ajuda.
grande abraço
Responder