Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal, tenho as seguintes tabelas no meu sistema de locação de imóveis.
TB_CONTRATO
CREATE TABLE `tb_contrato` (
`PK_INT_CONTRATO` int(11) NOT NULL AUTO_INCREMENT,
`FK_INT_LOCATARIO` int(11) NOT NULL,
`FK_INT_STATUS` int(11) DEFAULT NULL,
`FK_INT_QUARTO` int(11) DEFAULT NULL,
`ALU_DEC_VALOR` decimal(9,2) DEFAULT NULL,
`ALU_DAT_DATAENTREGA` date DEFAULT NULL,
`ALU_DAT_VENCIMENTO` date DEFAULT NULL,
`ALU_DAT_INICIO` date DEFAULT NULL,
`ALU_DAT_FIM` date DEFAULT NULL,
`ALU_INT_PRAZO` int(11) DEFAULT NULL,
`ALU_STR_CHAVE` varchar(32) DEFAULT NULL,
PRIMARY KEY (`PK_INT_ALUGUEL`),
KEY `fk_TB_ALUGUEL_TB_LOCATARIO1_idx` (`FK_INT_LOCATARIO`),
KEY `fk_TB_ALUGUEL_TB_STATUS1_idx` (`FK_INT_STATUS`),
KEY `fk_quarto` (`FK_INT_QUARTO`),
CONSTRAINT `fk_quarto` FOREIGN KEY (`FK_INT_QUARTO`) REFERENCES `tb_quarto` (`PK_INT_QUARTO`),
CONSTRAINT `fk_TB_ALUGUEL_TB_LOCATARIO1` FOREIGN KEY (`FK_INT_LOCATARIO`) REFERENCES `tb_locatario` (`PK_INT_LOCATARIO`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_TB_ALUGUEL_TB_STATUS1` FOREIGN KEY (`FK_INT_STATUS`) REFERENCES `tb_status` (`PK_INT_STATUS`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
TB_ADITIVO
CREATE TABLE `tb_aditivo` (
`PK_INT_ADITIVO` int(11) NOT NULL,
`FK_INT_ALUGUEL` int(11) DEFAULT NULL,
`ADI_DAT_INICIO` date DEFAULT NULL,
`ADI_DAT_FIM` date DEFAULT NULL,
`ADI_INT_PRAZO` int(11) DEFAULT NULL,
`ADI_DAT_VENCIMENTO` date DEFAULT NULL,
`ADI_DEC_VALOR` decimal(9,2) DEFAULT NULL,
`FK_INT_STATUS` int(11) DEFAULT NULL,
PRIMARY KEY (`PK_INT_ADITIVO`),
KEY `FK_INT_ALUGUEL_idx` (`FK_INT_ALUGUEL`),
KEY `FK_INT_STATUS_idx` (`FK_INT_STATUS`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
Queria exibir na tela todos os contratos atuais(vigentes), mas quero pesquisar nas duas tabelas, tipo quando não o contrato não tiver na tabela de aditivo (ou seja se ainda não houve renovação) trazer o registro na tabela de contrato e vice versa. Quero trazer todos os contratos atuais juntando as duas tabelas.
Resolvi fazendo assim
select fk_int_aluguel as id, fk_int_status as Status_, fk_int_quarto as Quarto, adi_dec_valor as Valor,
adi_dat_entrega as Entrega, adi_dat_vencimento as Vencimento from tb_aditivo where fk_int_status=1
union
SELECT pk_int_aluguel as id, fk_int_status as Status_, fk_int_quarto as Quarto, alu_dec_valor as Valor,
alu_dat_dataentrega as Entrega, alu_dat_vencimento as Vencimento FROM tb_aluguel
WHERE pk_int_aluguel NOT IN (SELECT fk_int_aluguel FROM tb_aditivo)
Essa query faz um select nas duas tabelas seleciona dados da tabela de contratos que não contem na tabela de aditivo.
Quero pesquisar na tabela de aditivos, se não tiver nenhum contrato vinculado com aditivo, pesquisar na tabela de contrato.