Dúvida com SQL em três tabelas

26/10/2015

0

Olá, pessoal!

Estou a seguinte estrutura de tabelas:

TABELA FALTAS
CREATE TABLE faltas(
  `id_falta` int(11) NOT NULL auto_increment,
   `numero_falta` varchar(100) NOT NULL,
    `tipificacao` varchar(100) NOT NULL,
   `data_fato` date NOT NULL,
  `hora_fato` time NOT NULL,  
  `status` varchar(100) DEFAULT NULL,
  PRIMARY KEY  (`id_falta`),
  UNIQUE KEY `Numero_falta` (`numero_falta`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
"



TABELA FALTAS_AUTORIA
CREATE TABLE falta_autoria (
  `id_` int(11) NOT NULL auto_increment,
   `numero_falta` varchar(50) NOT NULL, 
  `nome_autoria` varchar(255) NOT NULL,
   PRIMARY KEY  (`id`)
  ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



TABELA FALTAS_ALVOS
CREATE TABLE faltas_alvos (
  `id_` int(11) NOT NULL auto_increment,
   `numero_falta` varchar(50) NOT NULL, 
  `nome_alvo` varchar(255) NOT NULL,
   PRIMARY KEY  (`id`)
  ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



O numero_falta é um registro, tipo: 222/2015
Cada falta pode ter vários autores e vários alvos.

Tenho dois registros de faltas, mas meu sql me retorna ou os dois, sem o nome dos autores e alvos (4 em cada) ou vários registros (aí sim, mostrando todos os autores e alvos.

Já usei distinct e nada...
Elenilton Freitas

Elenilton Freitas

Responder

Posts

26/10/2015

Marcos P

Elenilton ?

Qual o esquema de relacionamento entre as tabelas ?

Quais as chaves estrangeiras que suportam esses relacionamentos ?

Qual a query que você construiu ? Por quê ela falha, qual o resultado obtido e qual o resuldado esperado ?

Tenho dois registros de faltas, mas meu sql me retorna ou os dois, sem o nome dos autores e alvos (4 em cada) ou vários registros (aí sim, mostrando todos os autores e alvos.


Temos que concordar que a explicação acima, não é lá muito clara...

Vá no Fiddle, crie a estrutura, insira alguns registros e retorne aqui, que eu lhe auxílio com isso...

OK ?!?
Responder

26/10/2015

Elenilton Freitas

Nao consegui usar o site...diz que algo aconteceu de errado.

Eu tenho dois registros na tabela faltas. Um registro nela deveria me trazer quatro registros das outras duas tabelas.Mas,ou repetem os registros da tabela faltas, de acordo com a quantidade das outras duas ou usando DISTINCT, me retorna os dois registros da tabela faltas mostrando apenas dois registros das demais tabelas e nao quatro...

Espero ter me explicado direito...
Responder

26/10/2015

Marcos P

O Fiddle dificilmente apresenta problemas, desde que não existam erros de sintaxe no seus comandos.

Sem as respostas das perguntas que coloquei ou a criação de uma ambiente de simulação, fica difícil lhe ajudar.
Responder

26/10/2015

Elenilton Freitas

Fiz lá o que pediu. Não sei mais o que é para fazer... [url:descricao=http://sqlfiddle.com/#!9/4d864d/1]http://sqlfiddle.com/#!9/4d864d/1[/url]
Responder

27/10/2015

Marcos P

Abaixo da janela aonde você criou a estrutura das tabelas, coloque os inserts de dados, para populá-las...

Na janela da direita você coloca a query que tentou fazer ( veja o exemplo que coloquei lá... ) e partimos daí para resolver o problema...

Se preferir, coloque teu skype ou gtalk aqui, que te chamo quando tiver um tempo...
Responder

27/10/2015

Elenilton Freitas

Estou quase tendo um treco...Fiquei até de madrugada e a manha toda entre tentativas e gente tentando ajudar, entraram indianos, iraquianos e marcianos via teamviwer e nada... esse site aí tem horas q nao carrega.... se tiver como auxiliar via teamviwer.... whats 73 99921633
Responder

27/10/2015

Marcos P

Te chamei no whats...
Responder

28/10/2015

Marcos P

CREATE TEMPORARY TABLE IF NOT EXISTS tmpTable AS (
select A.numero_inquerito, A.tipificacao, A.status,

       (select id from inqueritos_vitimas where a.id_inquerito = id_inquerito limit 1) as IDV1,
       (select id from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1) limit 1) as IDV2,
       (select id from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1,IDV2) limit 1) as IDV3,
       (select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito limit 1) as NomeV1,
       (select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1) limit 1) as NomeV2,
       (select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1,IDV2) limit 1) as NomeV3,

       (select id from inqueritos_autoria where a.id_inquerito = id_inquerito limit 1) as IDA1,
       (select id from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1) limit 1) as IDA2,
       (select id from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1,IDA2) limit 1) as IDA3,
       (select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito limit 1) as NomeA1,
       (select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1) limit 1) as NomeA2,
       (select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1,IDA2) limit 1) as NomeA3
 from inqueritos a);

 select numero_inquerito, tipificacao, status,
        NomeV1 as Vitima1, NomeV2 as Vitima2, NomeV3 as Vitima3,
        NomeA1 as Autor1, NomeA2 as Autor2, NomeA3 as Autor3
 from tmpTable;

 drop temporary table tmpTable;
Responder

03/11/2015

Elenilton Freitas

Desculpa a demora...

Resolvi com três querys. Mas sua query acima vai me servir essa parte:

select A.numero_inquerito, A.tipificacao, A.status,

(select id from inqueritos_vitimas where a.id_inquerito = id_inquerito limit 1) as IDV1,
(select id from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1) limit 1) as IDV2,
(select id from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1,IDV2) limit 1) as IDV3,
(select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito limit 1) as NomeV1,
(select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1) limit 1) as NomeV2,
(select nome_vitima from inqueritos_vitimas where a.id_inquerito = id_inquerito and id not in (IDV1,IDV2) limit 1) as NomeV3,

(select id from inqueritos_autoria where a.id_inquerito = id_inquerito limit 1) as IDA1,
(select id from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1) limit 1) as IDA2,
(select id from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1,IDA2) limit 1) as IDA3,
(select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito limit 1) as NomeA1,
(select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1) limit 1) as NomeA2,
(select nome_autoria from inqueritos_autoria where a.id_inquerito = id_inquerito and id not in (IDA1,IDA2) limit 1) as NomeA3
from inqueritos a;



A query completa nao retorna registros no phpMyAdmin.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar