none
Pesquisar varias tabelas em uma só query RRS feed

  • 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();
                }

    segunda-feira, 3 de setembro de 2012 11:58

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.br

    Se 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
    segunda-feira, 3 de setembro de 2012 12:32
    Moderador

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.br

    Se 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
    segunda-feira, 3 de setembro de 2012 12:32
    Moderador
  • muito obrigado pela resposta, parece ser a salvação, kkk, amanha deixo meu relato, vlw .
    terça-feira, 4 de setembro de 2012 01:51
  • 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();
                }

    terça-feira, 4 de setembro de 2012 12:33