Usuário com melhor resposta
Pesquisar varias tabelas em uma só query

Pergunta
-
Ola pessoal, estou com uma duvida com crtz simples para quem entende do assunto, gostaria de pesquisar determinados valores pelos seus respectivos IDs em varias tabelas de uma só vez.
ex.
Tenho uma tabela de pesquisar endereços por cep. Dai eu pesquiso o cep.
SELECT * FROM ENDERECO WHERE CEPID=05821030
ELE ME TRAZ A RUA, BAIRROID
Dai com o bairroID eu pesquiso o bairro e ele tb me restorna a cidadeID
Resumindo, tenho que fazer 3 selects para conseguir a Rua, Bairro, Cidade eu uso c# ainda tenho que ter 3 datareaders ....
Sera que tem como fazer esta consulta com uma só query ?
segue o cod. que estou usando abaixo.
OleDbConnection dataConnection = new OleDbConnection();
try
{
string fileDir = @"C:\CEPS.mdb".ToString();
string strConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileDir;
dataConnection.ConnectionString = strConexao;
dataConnection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = dataConnection;
command.CommandText = String.Format("SELECT * FROM endereco WHERE enderecoCEP='{0}' ", txtCEP.Text);
OleDbDataReader dataReader = command.ExecuteReader();
dataReader.Read();
txtLogra.Text = (dataReader["enderecoLOGRADOURO"].ToString());
string bairro = dataReader["bairroID"].ToString();
dataReader.Close();
OleDbCommand command2 = new OleDbCommand();
command2.CommandText = String.Format("SELECT * FROM bairro WHERE bairroID ={0} ", Convert.ToInt32(bairro));
OleDbDataReader dataReader2 = command2.ExecuteReader();
dataReader2 = command2.ExecuteReader();
dataReader2.Read();
txtBairro.Text = dataReader2["bairroNome"].ToString();
}
finally
{
dataConnection.Close();
dataConnection.Dispose();
}
Respostas
-
Só com endereço e bairro:
SELECT * FROM endereco E Inner Join bairro B on (B.bairroID = E.bairroID) WHERE E.enderecoCEP = 'Seu_CEP'
Acrescentando a tabela de cidade:
SELECT * FROM endereco E Inner Join bairro B on (B.bairroID = E.bairroID) Inner Join cidade C on (C.cidadeID = B.cidadeID) WHERE E.enderecoCEP = 'Seu_CEP'
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Douglas Turque segunda-feira, 3 de setembro de 2012 18:41
- Marcado como Resposta Ale1982 terça-feira, 4 de setembro de 2012 12:28
Todas as Respostas
-
Só com endereço e bairro:
SELECT * FROM endereco E Inner Join bairro B on (B.bairroID = E.bairroID) WHERE E.enderecoCEP = 'Seu_CEP'
Acrescentando a tabela de cidade:
SELECT * FROM endereco E Inner Join bairro B on (B.bairroID = E.bairroID) Inner Join cidade C on (C.cidadeID = B.cidadeID) WHERE E.enderecoCEP = 'Seu_CEP'
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Douglas Turque segunda-feira, 3 de setembro de 2012 18:41
- Marcado como Resposta Ale1982 terça-feira, 4 de setembro de 2012 12:28
-
-
Roberson consegui ! muito grato.
Aproveitando o post agora estou com duvidas para fazer o insert. acotece o seguinte:
tenho que buscar na tabela o ultimo registro "index" para saber qual sera o index do prox. registro
depois disto tenho que fazer um insert e se este insert nao retornar erros fazer outro insert.
da pra fazer tudo isso com uma só query ? lembrando que estou usando access sql .abaixo segue o cod. que consegui desenvolver.
string fileDir = @"C:\LoaDataBase.accdb";
string strConexao = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileDir + ";Persist Security Info=False;";
OleDbConnection dataConnection = new OleDbConnection();
OleDbCommand command = new OleDbCommand();
try
{
dataConnection.ConnectionString = strConexao;
dataConnection.Open();
command.Connection = dataConnection;
command.CommandText = String.Format("SELECT MAX (loaID) FROM LOA");
OleDbDataReader dataReader = command.ExecuteReader();
dataReader.Read();
int nextLoaID;
nextLoaID = 1 + Convert.ToInt32(dataReader[0]);
dataReader.Dispose();
string query = "INSERT INTO LOA (LOAID, MATRICULA, MODELO ) VALUES";
command.CommandText = String.Format(query + "( {0} , '{1}' , '{2}' )",
nextLoaID, //LOAID
txtMatricula.Text, //MATRICULA
txtModelo.Text, //MODELO
);
int returnv = command.ExecuteNonQuery();
if (returnv > 0)
{
string Query = "INSERT INTO RVSM ( LOAID , RVSM, BRNAV, PRNAV, RNP10, NATMNPS) VALUES";
command.CommandText = String.Format(Query + "( {0} , {1} , {2}, {3}, {4} , {5} )", nextLoaID, chkRVSM.Checked, chkBRNAV.Checked, chkPRNAV.Checked, chkRNP10.Checked, chkNATMNPS.Checked);
command.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString()+ " Erro ao cadastrar LOA, estes dados não foram adicionados, favor avisar o administrador do sistema imediatamente");
}
finally
{
dataConnection.Close();
dataConnection.Dispose();
command.Dispose();
}