Fórum Erro ao importar views #419003

27/06/2012

0

Olá galera, estou utilizando o mysql server 5.5, exportei o backup de meu banco de dados, dentro do mesmo contém várias views para facilitar a pesquisa no mesmo.Quando fui fazer os testes de importação em um outro banco deparei-me com um determinado erro, este erro se repete em todas as views que o código contém o mesmo padrão.
Segue o código que gera o erro:
/*!50001 DROP TABLE IF EXISTS `automovel_coluna`*/;
/*!50001 DROP VIEW IF EXISTS `automovel_coluna`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8 */;
/*!50001 SET character_set_results     = utf8 */;
/*!50001 SET collation_connection      = utf8_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `automovel_coluna` AS select `q`.`Codigo` AS `Codigo`,Automóvel AS `Tipo`,(select sum(`t`.`Automovel`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `Total` from `automovel` `q` where (`q`.`Automovel` > 0) union select `q`.`Codigo` AS `codigo`,Ônibus AS `Total`,(select sum(`t`.`Onibus`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Onibus) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Onibus` > 0) union select `q`.`Codigo` AS `codigo`,Microônibus AS `Total`,(select sum(`t`.`Microonibus`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Microonibus) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Microonibus` > 0) union select `q`.`Codigo` AS `codigo`,Caminhão AS `Total`,(select sum(`t`.`Caminhao`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Caminhao) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Caminhao` > 0) union select `q`.`Codigo` AS `codigo`,Caminhonete AS `Total`,(select sum(`t`.`Caminhonete`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Caminhonete) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Caminhonete` > 0) union select `q`.`Codigo` AS `codigo`,Camioneta AS `Total`,(select sum(`t`.`Camioneta`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Camioneta) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Camioneta` > 0) union select `q`.`Codigo` AS `codigo`,Reboque AS `Total`,(select sum(`t`.`Reboque`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Reboque) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Reboque` > 0) union select `q`.`Codigo` AS `codigo`,Semi-Reboque AS `Total`,(select sum(`t`.`SemiReboque`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.SemiReboque) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`SemiReboque` > 0) union select `q`.`Codigo` AS `codigo`,Motocicleta AS `Total`,(select sum(`t`.`Motocicleta`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Motocicleta) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Motocicleta` > 0) union select `q`.`Codigo` AS `codigo`,Bicicleta AS `Total`,(select sum(`t`.`Bicicleta`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Bicicleta) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Bicicleta` > 0) union select `q`.`Codigo` AS `codigo`,Outro AS `Total`,(select sum(`t`.`Outro`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.Outro) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`Outro` > 0) union select `q`.`Codigo` AS `codigo`,Não Informado AS `Total`,(select sum(`t`.`NaoInformado`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS `(SELECT SUM(t.NaoInformado) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )` from `automovel` `q` where (`q`.`NaoInformado` > 0) */;

O erro se define da seguinte forma:
[Err] 1166 (4200) at line 4134 - Incorrect column name (SELECT SUM(t.Onibus) 
            FROM automovel t
            WHERE t.Codigo = q.codigo )

Não consegui até agora resolução para tal problema.
Alguém tem alguma dica para resolução ou teve o problema e resolveu de alguma forma?
Robson Antunes

Robson Antunes

Responder

Posts

27/06/2012

Eduardo Gonçalves

Percebi que logo depois do seu primeiro UNION o SELECT ficou assim:

union 
select `q`.`Codigo` AS `codigo`,
       Ônibus AS `Total`,
	   (select sum(`t`.`Onibus`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS 
	   `(SELECT SUM(t.Onibus) FROM automovel t WHERE t.Codigo = q.codigo )` 
FROM `automovel` `q` where (`q`.`Onibus` > 0)


Olha o que está escrito depois do AS... uma instrução SELECT, quando deveria estar um apelido para a consulta anterior, como por exemplo AS Total.

Responder

Gostei + 0

27/06/2012

Robson Antunes

O interessante desta view é que o código base da view é
SELECT q.Codigo,
			Automóvel AS Tipo,
		(SELECT SUM(t.Automovel) 
		FROM automovel t
		WHERE (t.Codigo = q.Codigo)) AS Total
FROM automovel q
WHERE (q.Automovel > 0)
UNION 
	SELECT q.codigo,
				Ônibus AS Total ,
			(SELECT SUM(t.Onibus) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Onibus > 0) 
UNION 
	SELECT q.codigo,
				Microônibus AS Total ,
			(SELECT SUM(t.Microonibus) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Microonibus > 0) 
UNION 
	SELECT q.codigo,
				Caminhão AS Total ,
			(SELECT SUM(t.Caminhao) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Caminhao > 0) 
UNION 
	SELECT q.codigo,
				Caminhonete AS Total ,
			(SELECT SUM(t.Caminhonete) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Caminhonete > 0) 
UNION 
	SELECT q.codigo,
				Camioneta AS Total ,
			(SELECT SUM(t.Camioneta) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Camioneta > 0) 
UNION 
	SELECT q.codigo,
				Reboque AS Total ,
			(SELECT SUM(t.Reboque) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Reboque > 0) 
UNION 
	SELECT q.codigo,
				Semi-Reboque AS Total ,
			(SELECT SUM(t.SemiReboque) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.SemiReboque > 0) 
UNION 
	SELECT q.codigo,
				Motocicleta AS Total ,
			(SELECT SUM(t.Motocicleta) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Motocicleta > 0) 
UNION 
	SELECT q.codigo,
				Bicicleta AS Total ,
			(SELECT SUM(t.Bicicleta) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Bicicleta > 0) 
UNION 
	SELECT q.codigo,
				Outro AS Total ,
			(SELECT SUM(t.Outro) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.Outro > 0) 
UNION 
	SELECT q.codigo,
				Não Informado AS Total ,
			(SELECT SUM(t.NaoInformado) 
			FROM automovel t
			WHERE t.Codigo = q.codigo ) 
	FROM automovel q 
	WHERE (q.NaoInformado > 0)

e que quando é exportada ela fica desta forma citada anteriormente, o erro sempre acaba acontecendo... existe uma forma de fugir deste erro?
Alguma alteração no código base? o até mesmo é melhor reescrever esta view com o código base?
Responder

Gostei + 0

27/06/2012

Robson Antunes

Percebi que logo depois do seu primeiro UNION o SELECT ficou assim:

union 
select `q`.`Codigo` AS `codigo`,
       Ônibus AS `Total`,
	   (select sum(`t`.`Onibus`) from `automovel` `t` where (`t`.`Codigo` = `q`.`Codigo`)) AS 
	   `(SELECT SUM(t.Onibus) FROM automovel t WHERE t.Codigo = q.codigo )` 
FROM `automovel` `q` where (`q`.`Onibus` > 0)


Olha o que está escrito depois do AS... uma instrução SELECT, quando deveria estar um apelido para a consulta anterior, como por exemplo AS Total.


Eduardo, aí você me ajudou muito, fiz o teste de reescrever a view da forma do código base da mesma.
Inicialmente deu certo, o problema agora é que toda vez que exportar as views vai gerar o mesmo erro e sempre terei que reescreve-lo.
Alguma forma de evitar isto?
Responder

Gostei + 0

27/06/2012

Eduardo Gonçalves

Olha, nunca passei por esse tipo de problema. Talvez possa resolver se você forçar apelidos para todas as colunas em todos os selects de todos os unions (ufa!). Veja no exemplo abaixo, onde eu coloquei um ¨AS Soma¨:

...
UNION
SELECT q.codigo,
Microônibus AS Total ,
(SELECT SUM(t.Microonibus)
FROM automovel t
WHERE t.Codigo = q.codigo ) AS Soma
FROM automovel q
WHERE (q.Microonibus > 0)
UNION
SELECT q.codigo,
Caminhão AS Total ,
(SELECT SUM(t.Caminhao)
FROM automovel t
WHERE t.Codigo = q.codigo )  AS Soma
FROM automovel q
WHERE (q.Caminhao > 0) 
...


Não tenho idéia se vai resolver, mas é um teste que você pode fazer
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar