none
Select em duas tabelas

    Question

  • Rapaziada, como faço pra consultar dados de duas tabelas? Procurei na net mas acabei nao encontrando nada que me ajudasse.

    Tenho duas tabelas, imagine tabela1, e tabela 2, a tabela2 possui uma FK que por sua vez é a PK da tabela1. Como seria o comando SQL pra consultar seus campos?

    Seria algo semelhante: ?

    SELECT campo1.tab1, campo2.tab1, campo1.tab2, campo2.tab2, FROM tabela1 tab1 AND  tabela2 tab2

    Grato.


    "Quando se faz o que se gosta, o sucesso é inevitável" -- Jean Ricardo da Costa -- Analista de Sistemas
    Wednesday, November 24, 2010 5:34 PM

Answers

  • Oh código é assim:

    SELECT
        C.produto, C.loja, C.descricao, CP.Parcelas, CP.Data_Pagamento, CP.Valor
    FROM Compras C
        INNER JOIN
    CompraParcela CP ON C.cod_produto = CP.CodigoProduto
        WHERE CP.Data_Pagamento BETWEEN @p1 AND @p2
    GROUP BY
        C.produto, C.loja, C.descricao, CP.Parcelas, CP.Data_Pagamento, CP.Valor

    ---

     

    Você tem que colocar a cláusula WHERE antes do GROUP BY, uma outra cláusula que serve como filtro e que vai depois do GROUP BY é a cláusula HAVING. Agora é só fazer sua implementação!

     

    Se a resposta foi útil, marque como RESPOSTA, caso contrário continue postando suas dúvidas.

     

    • Marked as answer by JEANSHARP Tuesday, December 21, 2010 10:51 PM
    Tuesday, December 21, 2010 9:57 PM

All replies

  • select a.coluna1tab1, b.coluna1tab2

    from tabela1 a join tabela2 b

    on a.pk = b.fk

    Wednesday, November 24, 2010 5:40 PM
    Moderator
  •  

    Tente

    Select Campo1.tab1,Campo2.tab1,Campo1.tab2,Campo2.tab2

    FROM tabela1 tab1,tabela2 tab2

    where

    CampoChave.tab1 = CampoFK.tab2


    viniciuseroico
    Wednesday, November 24, 2010 5:54 PM
  •  

    Tente

    Select Campo1.tab1,Campo2.tab1,Campo1.tab2,Campo2.tab2

    FROM tabela1 tab1,tabela2 tab2

    where

    CampoChave.tab1 = CampoFK.tab2


    viniciuseroico

    Apenas complementando a sugestão do Vinicius... Acho que a cláusula WHERE seria tab1.CampoChave = tab2.CampoFK, e as colunas do SELECT seria tab1.Campo1, tab1.Campo2, tab2.Campo1, tab2.Campo2

    Sds.,

     


    Daniel Ethur Porto Alegre/RS
    • Edited by Daniel Ethur Wednesday, November 24, 2010 7:40 PM Faltou sugerir as colunas do Select
    Wednesday, November 24, 2010 7:39 PM
  • Amigos, obrigado pela atenção, eu tentei fazer e constou erro de sintaxe na clausula FROM, vou exibir o metodo escrito em C# para que vcs deem uma olhada, e também especificar os nomes e campos das tabelas.

    Compras (cod_produto(PK), produto, loja, descricao);

    CompraParcela(CodigoParcela(PK), cod_produto(FK), Parcelas, Data_Pagamento, Valor);

    //METODO PARA EXIBIR TODAS AS COMPRAS DO MES SELECIONADO
        public static DataTable dataGridDespesa(string mes, string ano)
        {
          try
          {
            con = new OleDbConnection(provedor);
            con.Open();
    
            da = new OleDbDataAdapter(" SELECT C.produto, C.loja, C.descricao," +
            "CP.Parcelas, CP.Data_Pagamento, CP.Valor FROM Compras C, CompraParcela CP WHERE" +
            "C.cod_produto = CP.CodigoProduto AND CP.Data_Pagamento BETWEEN @p1 AND @P2", con);
            DateTime startDate = new DateTime(Convert.ToInt32(ano), Convert.ToInt32(mes), 1);
            DateTime endDate = new DateTime(startDate.Year, startDate.Month, DateTime.DaysInMonth(startDate.Year, startDate.Month));
            da.SelectCommand.Parameters.AddWithValue("@p1", startDate);
            da.SelectCommand.Parameters.AddWithValue("@p2", endDate);
            dt = new DataTable();
            da.Fill(dt);
            con.Close();
            return dt;
          }
          catch (Exception ex)
          {
            MessageBox.Show("Erro" + ex.Message);
            return null;
          }
        }
    
    Grato.


    "Quando se faz o que se gosta, o sucesso é inevitável" -- Jean Ricardo da Costa -- Analista de Sistemas
    Wednesday, November 24, 2010 9:01 PM
  • Me parece estar OK o teu SELECT. Desconfio, entretanto, que esteja faltando um ESPAÇO entre o Where e o C.cod_produto, em consequência da quebra de linha que precisaste fazer nessa parte do SQL. Acabaria causando erro From, porque o interpretador não teria encontrado o comando Where corretamente.

     


    Daniel Ethur Porto Alegre/RS
    Thursday, November 25, 2010 12:29 AM
  • Daniel, estou desconfiando que seja os parametros que estou tendo que passar, pois fiz o teste direto em no MySql e deu certo a consulta, e necessito destes parametros mes e ano, pois é para uma consulta mensal de gastos realizado pelo usuario.

    Agora estou tentando fazer outro select,talvez seja mais completo que o anterior...

    Ve o que você acha.

    da = new OleDbDataAdapter("SELECT C.produto, C.loja, C.descricao, CP.Parcelas, CP.Data_Pagamento, CP.Valor " +
            "FROM Compras C JOIN CompraParcela CP ON C.cod_produto = CP.CodigoProduto " +
            "GROUP BY C.produto, C.loja, C.descricao, CP.Parcelas, CP.Data_Pagamento, CP.Valor " +
            "WHERE CP.Data_Pagamento BETWEEN @p1 AND @p2", con);
    
    Grato.


    "Quando se faz o que se gosta, o sucesso é inevitável" -- Jean Ricardo da Costa -- Analista de Sistemas
    Thursday, November 25, 2010 2:20 AM
  • Jean,

    Nesse outro SQL, acho q o problema é o GROUP BY antes do WHERE. 

    Sugiro que para testares no MySql esses problemas em SQL com concatenações de String dentro de um OleDbAdapter, tu inclua um breakpoint na linha do New OleDbDataAdapter e, quando a execução do teu sistema chegar nesse breakpoint, tu selecione todo o miolo do SQL (desde a primeira aspa do SELECT até a última aspa, antes da vírgula do segundo parâmetro) e faça um Quickwatch (no VB, a tecla de atalho é Shift + F9). Na telinha que abrir, podes copiar o conteúdo dessa String selecionada e testá-lo no MySQL. Essa é a verdadeira instrução que está sendo enviada para o Banco-de-Dados. Se houver algum problema nas concatenações da String, ficará evidente nessa procedimento.

    Sds.,


    Daniel Ethur Porto Alegre/RS
    Thursday, November 25, 2010 10:35 AM
  • Daniel, o problema realmente nao está no select em que nos estamos elaborando e sim ao passar ao parametros nele....WHERE Data_Pagamento BETWEEN @p1 AND @p2.... pois realizei varias formas de fazer select no BD tanto no MySql quanto no Access, seria necessario eu criar um topico em outro forum mais voltado á C# para resolver esse problema específico?

    Grato.


    "Quando se faz o que se gosta, o sucesso é inevitável" -- Jean Ricardo da Costa -- Analista de Sistemas
    Thursday, November 25, 2010 5:24 PM
  • Olá Jean!

    Se entendi bem a sua dúvida segue o que você estava precisando:

    Obs: A chave primária das duas tabelas tem ser do mesmo tipo.

     

    SELECT lastName, categoryName
    
    		FROM Categories 
    
    		INNER JOIN Employees ON 
    
    		EmployeeID = CategoryID
    
    				 
    

    Fiz esse select no banco Northwind e funcionou corretamente.

    Att.

     


    Eder Costa - LATAM Forum Support Engineer
    Microsoft Corporation
    Thursday, December 16, 2010 5:20 PM
    Moderator
  • Jean!

    Obteve progresso?

    Att;


    Eder Costa - LATAM Forum Support Engineer
    Microsoft Corporation
    Tuesday, December 21, 2010 2:51 PM
    Moderator
  • Oh código é assim:

    SELECT
        C.produto, C.loja, C.descricao, CP.Parcelas, CP.Data_Pagamento, CP.Valor
    FROM Compras C
        INNER JOIN
    CompraParcela CP ON C.cod_produto = CP.CodigoProduto
        WHERE CP.Data_Pagamento BETWEEN @p1 AND @p2
    GROUP BY
        C.produto, C.loja, C.descricao, CP.Parcelas, CP.Data_Pagamento, CP.Valor

    ---

     

    Você tem que colocar a cláusula WHERE antes do GROUP BY, uma outra cláusula que serve como filtro e que vai depois do GROUP BY é a cláusula HAVING. Agora é só fazer sua implementação!

     

    Se a resposta foi útil, marque como RESPOSTA, caso contrário continue postando suas dúvidas.

     

    • Marked as answer by JEANSHARP Tuesday, December 21, 2010 10:51 PM
    Tuesday, December 21, 2010 9:57 PM
  • Rapaziada, pelo que me lembro postei a resposta, mesmo porque esse codigo já foi resolvido na epoca em que estava sendo debatida, porém nao estou vendo aqui o resultado, vou postar como resposta a dica do Matos, pois nao lembro nem qual sistema que fiz que possuia esse select.

    Att.


    "Quando se faz o que se gosta, o sucesso é inevitável" -- Jean Ricardo da Costa -- Analista de Sistemas
    Tuesday, December 21, 2010 10:51 PM