Dúvida com SQL em três tabelas
Olá, pessoal!
Estou a seguinte estrutura de tabelas:
TABELA FALTAS
TABELA FALTAS_AUTORIA
TABELA FALTAS_ALVOS
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...
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
Curtidas 0
Respostas
Marcos P
26/10/2015
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 ?
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 ?!?
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 ?!?
GOSTEI 0
Elenilton Freitas
26/10/2015
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...
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...
GOSTEI 0
Marcos P
26/10/2015
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.
Sem as respostas das perguntas que coloquei ou a criação de uma ambiente de simulação, fica difícil lhe ajudar.
GOSTEI 0
Elenilton Freitas
26/10/2015
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]
GOSTEI 0
Marcos P
26/10/2015
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...
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...
GOSTEI 0
Elenilton Freitas
26/10/2015
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
GOSTEI 0
Marcos P
26/10/2015
Te chamei no whats...
GOSTEI 0
Marcos P
26/10/2015
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;
GOSTEI 0
Elenilton Freitas
26/10/2015
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.
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.
GOSTEI 0