Consulta em tres tabelas
05/06/2008
0
Pessoal estou querendo fazer uma consulta sql numa tabela de inquerito policial (inq_pol) por delegacia e por departamento, sendo que no meu banco tem as seguintes tabelas:
CREATE TABLE ´inq_policial´ (
´ID_IP´ int(11) NOT NULL,
´ID_MAPA´ int(11) NOT NULL,
´VITIMA´ varchar(85) NOT NULL,
´INDICIADO´ varchar(85) NOT NULL,
´ID_INFRACAO´ int(11) NOT NULL,
´BAIXA´ date NOT NULL,
´SITUACAO´ varchar(35) NOT NULL,
PRIMARY KEY (´ID_IP´)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE ´mapa´ (
´ID_MAPA´ int(10) unsigned zerofill NOT NULL auto_increment,
´ID_DELEGACIA´ int(11) default NULL,
´RESP_PREENCHIMENTO´ varchar(50) default NULL,
´MES´ varchar(15) default NULL,
´ANO´ int(10) unsigned default NULL,
´TIPO´ int(11) NOT NULL,
´SITUACAO´ varchar(10) NOT NULL,
PRIMARY KEY (´ID_MAPA´)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
CREATE TABLE ´delegacia´ (
´ID_DELEGACIA´ int(11) NOT NULL auto_increment,
´DELEGACIA´ varchar(65) NOT NULL,
´SIGLA´ varchar(10) NOT NULL,
´LOCAL´ varchar(15) NOT NULL,
´ID_MUNICIPIO´ int(11) NOT NULL,
´CODSENASP´ int(11) default NULL,
´DEPARTAMENTO´ varchar(25) NOT NULL,
PRIMARY KEY (´ID_DELEGACIA´)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Um mapa esta para vários inq_policial e uma delegacia esta para vários mapas...
qualquer duvida pode me perguntar!!
CREATE TABLE ´inq_policial´ (
´ID_IP´ int(11) NOT NULL,
´ID_MAPA´ int(11) NOT NULL,
´VITIMA´ varchar(85) NOT NULL,
´INDICIADO´ varchar(85) NOT NULL,
´ID_INFRACAO´ int(11) NOT NULL,
´BAIXA´ date NOT NULL,
´SITUACAO´ varchar(35) NOT NULL,
PRIMARY KEY (´ID_IP´)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE ´mapa´ (
´ID_MAPA´ int(10) unsigned zerofill NOT NULL auto_increment,
´ID_DELEGACIA´ int(11) default NULL,
´RESP_PREENCHIMENTO´ varchar(50) default NULL,
´MES´ varchar(15) default NULL,
´ANO´ int(10) unsigned default NULL,
´TIPO´ int(11) NOT NULL,
´SITUACAO´ varchar(10) NOT NULL,
PRIMARY KEY (´ID_MAPA´)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
CREATE TABLE ´delegacia´ (
´ID_DELEGACIA´ int(11) NOT NULL auto_increment,
´DELEGACIA´ varchar(65) NOT NULL,
´SIGLA´ varchar(10) NOT NULL,
´LOCAL´ varchar(15) NOT NULL,
´ID_MUNICIPIO´ int(11) NOT NULL,
´CODSENASP´ int(11) default NULL,
´DEPARTAMENTO´ varchar(25) NOT NULL,
PRIMARY KEY (´ID_DELEGACIA´)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Um mapa esta para vários inq_policial e uma delegacia esta para vários mapas...
qualquer duvida pode me perguntar!!
Brunoalexandre.ap
Curtir tópico
+ 0
Responder
Posts
06/06/2008
Paulo
select inq.vitima,map.resp_preenchimento,del.sigla
from inq_policial inq inner join mapa map on(inq.id_mapa = map.id_mapa)
inner join(del.id_delegacia = map.id_delegacia)
Coloquei apenas um campo de cada tabela, apenas para ilustrar, mas vc coloca os campos necessários. Pode-se usar LEFT OU RIGTH JOIN.
Responder
06/06/2008
Du_nirvana
Não sei qual base de dados você está usando, mas o recomendável para manter a integridade relacional é criar chaves estrangeiras:
Quanto a consulta poderia fazer assim, depende do que você deseja encontrar:
Qualquer coisa nos dê mais detalhes...
ALTER TABLE inq_policial ADD CONSTRAINT FOREIGN KEY(ID_MAPA) REFERENCES mapa(ID_MAPA); ALTER TABLE mapa ADD CONSTRAINT FOREIGN KEY(ID_DELEGACIA) REFERENCES delegacia(ID_DELEGACIA);
Quanto a consulta poderia fazer assim, depende do que você deseja encontrar:
SELECT IP.VITIMA, IP.INDICIADO, IP.ID_INFRACAO, MA.RESP_PREENCHIMENTO, DE.DELEGACIA FROM INQ_POLICIAL IP, MAPA MA, DELEGACIA DE WHERE DE.ID_DELEGACIA = MA.ID_DELEGACIA AND MA.ID_MAPA = IP.ID_MAPA;
Qualquer coisa nos dê mais detalhes...
Responder
Clique aqui para fazer login e interagir na Comunidade :)