Erro ao importar views
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:
O erro se define da seguinte forma:
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?
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) */;
[Err] 1166 (4200) at line 4134 - Incorrect column name (SELECT SUM(t.Onibus)
FROM automovel t
WHERE t.Codigo = q.codigo )
Alguém tem alguma dica para resolução ou teve o problema e resolveu de alguma forma?
Robson Antunes
Curtidas 0
Respostas
Eduardo Gonçalves
27/06/2012
Percebi que logo depois do seu primeiro UNION o SELECT ficou assim:
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.
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.
GOSTEI 0
Robson Antunes
27/06/2012
O interessante desta view é que o código base da view é
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?
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?
GOSTEI 0
Robson Antunes
27/06/2012
Percebi que logo depois do seu primeiro UNION o SELECT ficou assim:
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.
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?
GOSTEI 0
Eduardo Gonçalves
27/06/2012
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¨:
Não tenho idéia se vai resolver, mas é um teste que você pode fazer
... 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
GOSTEI 0