Ae moçada, dando uma pesquisada no assunto vi que com cursores eu consigo resolver meu problema. Minha idéia é usar um cursor para fazer o primeiro select, inserir os dados desse select para uma tabela temporaria. Depois usar outros 4 cursores para pegar os outros resultados que preciso e atualizar essa tabela. Por último eu apenas pegava todo o conteúdo da tabela temporaria e gerava os relatórios. Por enquanto meu código está assim: <code> DROP PROCEDURE IF EXISTS minhaProcedure; delimiter | CREATE PROCEDURE minhaProcedure() BEGIN DROP TABLE IF EXISTS `meuBD`.`TabelaTemp`; CREATE TABLE `meuBD`.`TabelaTemp` ( `codigo` varchar(255) NOT NULL, `razaoSocial` varchar(255) NOT NULL, `idInt` int(10) unsigned NOT NULL, `dataMax` date, `total` double, `quantidadeTotal` int(10) unsigned, `custo` double ) ENGINE=InnoDB DEFAULT CHARSET=latin1; DECLARE @done INT DEFAULT 0; DECLARE @cod VARCHAR(255); DECLARE @rSocial VARCHAR(255); DECLARE @idInt INT; DECLARE @maxData DATE; DECLARE @total DOUBLE; DECLARE @qtdTotal INT; DECLARE @custoTotal DOUBLE; DECLARE curs1 CURSOR FOR(SELECT i.codigo, i.razaoSocial, i.idInstituicao FROM Instituicao i, Cliente c WHERE i.idInstituicao = c.idInstituicao AND i.bloqueado = 0 ORDER BY i.codigo); DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN curs1; REPEAT FETCH curs1 INTO @cod, @rSocial, @idInt; IF NOT @done THEN INSERT INTO TabelaTemp (codigo, razaoSocial, idInt) VALUES (@cod, @rSocial, @idInt); END IF; UNTIL @done END REPEAT; CLOSE curs1; END | DELIMITER; </code> Por enquanto estou apenas tentando inserir os dados do primeiro cursor na tabela temporária, mas dessa forma o MySQL Administrator (que estou usando pra testar) não roda dizendo que a procedure não existe (PROCEDURE minhaProcedure does not exist), se eu tiro o DROP diz que tem um erro de sintaxe (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3). Alguém tem alguma ideia?