Consulta em tres tabelas

05/06/2008

2

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!!


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:

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar