Publicidade

AndersonWS

INNER JOIN retorna valores errados

mysql

Amigos tenho a seguinte situação com as seguintes tabelas:

total
planta
un
nome

 

Tenho vários itens cadastrados, sendo que todas as tabelas tem a seguinte estrutura:
id(auto incremente), código, texto livre

 

Fiz um INNER JOIN para relacionar os elementos "texto livre" usando o "código" para a união, exemplo:
total: codigo 5, texto a
planta: codigo 5, texto b
un: codigo 5, texto c
nome: codigo 5, texto n

 

O problema é que retorna errado, duplicando os valores.
Para entender segue o código:
 

SELECT total.codigo, total.total,
planta.planta, un.un, nome.nome
FROM
total INNER JOIN planta INNER JOIN un INNER JOIN nome
ON 
total.codigo = planta.codigo
AND 
total.codigo = un.codigo
AND 
total.codigo = nome.codigo
WHERE 
total.codigo = '10'
GROUP BY total.id

Retornou:
id        total    codigo     unidade       nome
10         10         25         Tonelada     ABACATE
10         500       25         Tonelada     ABACATE

E deveria vir:
id        total    codigo     unidade       nome
10         10         25         Tonelada     ABACATE
10         500       25         Kilograma   LARANJA

 

Ou seja, total vem correto mas unidade e nome repetem.

Percebi que com 2 tabelas funciona desta forma mas com 3 ou mais se repetem.

Qual a solução, se é que há uma além de mudar todo o meu banco de dados? Tem como manter assim?

 

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como as tabelas se relacionam ?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Motta disse:

Como as tabelas se relacionam ?

Então ai que está a minha dificuldade. Qual a melhor maneira de relaciona-las?
A principio elas se relacionam pelo campo "codigo" que tem em todas elas.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código é a mesma "coisa" em todas as tabelas ?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 10/08/2017 at 22:16, Motta disse:

Código é a mesma "coisa" em todas as tabelas ?

Sim.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

são a chave da mesma entidade , o relacionamento então seria sempre pelo código.

0

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 12/08/2017 at 11:06, Motta disse:

são a chave da mesma entidade , o relacionamento então seria sempre pelo código.

Sim, foi o que eu fiz, eu postei lá no inicio porém ele repete os elementos.
Alguém me explica onde está o erro na minha sql?

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

para se saber o possível erro em sua SQL é preciso conhecer as tabelas e seus relacionamento.;

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Envia a estrutura das tabelas. Fica mais fácil pensar em algum SQL.

No MySQL o comando é

DESC <tabela>

 

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora

  • Próximos Eventos

  • Conteúdo Similar

    • Por alexmt
      Olá pessoal, sou novo por aqui.
      Gostaria de saber se alguém pode me ajudar a solucionar um problema. Tentei resolver mas não consegui.
      Tenho cadastrado no banco de dados três tabelas. (id, pagina, content).
       
      Primeiro apareceu essa informação...
      Notice: Undefined index: content in C:\WebServer\Apache2.2\htdocs\sitedinamico\admin\page_cadastro.php on line 25
       
      Consegui resolver fazendo isso...
      if(isset($_POST['content'])){
          $content_editar = $_POST['content'];
      }
       
      A mensagem desapareceu porem não consigo editar quando clico no botao... O que devo fazer? Qual é o erro?
       
      <?php
      $pagina_editar = $_POST['pagina'];
      //$content_editar = $_POST['content'];
      if(isset($_POST['content'])){
          $content_editar = $_POST['content'];
      }
      if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'enviar_form'){
          $cadastrar_pagina = mysql_query("INSERT INTO up_page (pagina, content) VALUES ('$pagina_editar', '$content_editar')")
                                  or die(mysql_error());
      }

      if(isset($_POST['editar_post']) && $_POST['editar_post'] == 'enviar_form'){
          $atualiza_pagina = mysql_query("UPDATE up_page SET content = '$content_editar' WHERE pagina = '$pagina_editar'")
                              or die(mysql_error());
      }

          $pagina_de_edicao = $_POST['pagina'];
          
          $pega_pagina = mysql_query("SELECT id, pagina, content FROM up_page WHERE pagina = '$pagina_de_edicao'")
                          or die(mysql_error());
          if(@mysql_num_rows($pega_pagina) <= '0'){
          
      ?>
          <form name="cadastrar_pagina" method="post" action="" enctype="multipart/form-data">
          
          <input type="hidden" name="pagina" value="<?php echo $pagina_de_edicao;?>" />
          
          <textarea id="content" name="content" rows="30" cols=""></textarea>
          
          <input type="hidden" name="cadastrar" value="envia_form" />
          
          <input type="submit" value="cadastrar" name="cadastrar" class="cadastro_btn" />
          </form>
      <?php
          }else{
              while($res_pagina = mysql_fetch_array($pega_pagina)){
                  
                  $id = $res_pagina[0];
                  $pagina = $res_pagina[1];
                  $content = $res_pagina[2];
          ?>
          
          <form name="edita_pagina" method="post" action="" enctype="multipart/form-data">
          
          <input type="hidden" name="pagina" id="pagina" value="<?php echo $pagina_de_edicao; ?>" />
          
          <textarea name="content" rows="30" cols=""><?php echo $content; ?></textarea>
          
          <input type="hidden" id="editar_post" name="editar_post" value="envia_form" />
          <input type="submit" value="editar" name="editar" class="cadastro_btn">
          </form>
          
          <?php
              }
          }
          ?>
    • Por fogazza
      Boa noite a todos.
      Queria tirar uma dúvida.
      Possui um formulário php de cadastro de clientes, e outro formulário onde eu cadastro os empréstimos destes clientes.
      Minha pergunta é:
      Existe alguma forma de eu ao digitar o cpf, ele preencher automaticamente o campo nome do formulário empréstimos de acordo com o nome que está cadastrado na tabela clientes?
    • Por Blacksnake
      Olá,
       
      Sou novo na linguagem c# e estou a estudar o novo ef core.
       
      Quando comecei instalei o ef core 1.0.1 agora fiz update para 2.0.0 bem como do vs2015 para o vs2017 comunity.
      Após este update surge-me o seguinte erro:
      System.IO.FileNotFoundException: 'Não foi possível carregar o ficheiro ou assemblagem 'MySqlConnector, Version=0.25.1.0, Culture=neutral, PublicKeyToken=null' ou uma das respectivas dependências. O sistema não conseguiu localizar o ficheiro especificado.'
       
      O meu código é:
      using ERP.Models;
      using ERP.Models.Options;
      using Microsoft.EntityFrameworkCore.Diagnostics;
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.ComponentModel.DataAnnotations;
      using System.ComponentModel.DataAnnotations.Schema;
      using Microsoft.EntityFrameworkCore;
       
      namespace ERP.Datasource
      {
          public class Mycontext: DbContext
          {
              protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
                  => optionsBuilder
                      .UseMySql(@"Server=localhost;database=ef;uid=root;pwd=******;")
                      .ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));
       
       
              public DbSet<User> User { get; set; }
              public DbSet<Entity> Entities { get; set; }
              public DbSet<Infoapp> Infoapp { get; set; }
              public DbSet<CountryCoin> CountryCoin { get; set; }
       
          }
      }
    • Por sabrina.teles
      create database copa20143; use copa20143;   create table grupo(
      id_grupo varchar(45) primary key,
      grupo character,
      selecao varchar(150),
      timeVencedor varchar(45),
      timePerdedor varchar(45),
      Empate varchar(45));   create table jogo(
      id_jogo int primary key,
      dataJogo date,
      horario time,
      placar varchar(45),
      locall varchar(45));   alter table jogo
      add grupo_id varchar(45);   alter table jogo
      add foreign key(grupo_id) references grupo(id_grupo);   insert into jogo (id_jogo,dataJogo,horario,placar,locall, grupo_id)
      values(01,"2014/06/12","17:00",'3x1', 'São Paulo- Arena Corinthians ','A');   0       Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails 0.094 sec  
       
         
    • Por Jefferson andre
      Bom dia,
       
      Estou com um erro na tela de login do site que acontece quando o email + a senha nao sao encontrados no mysql.
       
      O estranho é que a rotina if nem deveria passar por esta parte
       
      <?php session_start(); $email = isset($_POST['a_email']) ? $_POST['a_email'] : ''; $senha = isset($_POST['a_senha']) ? $_POST['a_senha'] : ''; $senha=md5($senha); //print "$email"; include("conexao.php"); $sql = "SELECT * FROM empresa_emails WHERE email = '$email' AND senha = '$senha'"; foreach ($arquivo->query($sql) as $row) { // print $row['email'] . "\t"; // print $row['senha'] . "\t"; // print $row['codemp'] . "\n"; } if($arquivo->query($sql) !== true) { $_SESSION['email']=$email; $_SESSION['senha']=$senha; $codemp = $row['codemp']; ERRO BEM AQUI $_SESSION['id_emp']=$codemp; //echo $codemp; //header('location:menuprincipal.php'); } else{ unset ($_SESSION['email']); unset ($_SESSION['senha']); unset ($_SESSION['id_emp']); header('location:index.php'); } ?> Se o email e a senha md5 estão na base de dados ao meu ver o if é = true, se o query resulta em falso então ela vai pra parte do unset
       
      o erro ocorre na linha  $codemp = $row['codemp'] e faz sentido já que o row não existe com um query falso
       
      Alguem por favor pode me dizer onde esta o erro no if
       
      Obrigado pela atenção