2012-02-06 28 views
0

时产生错误的代码我有一个MySQL视图是完美的工作:所有MySQL设计师改变视图

SELECT `t`.`TraderId` AS `TraderId`,`t`.`ShopName` AS `ShopName`,`t`.`UserId` AS `UserId`,`t`.`CreatedOn` AS `CreatedOn`,`t`.`MOL` AS `MOL`,`u`.`Phone` AS `Phone`,`u`.`Email` AS `Email`,`rt`.`Name` AS `RentType`,(
SELECT SUM(`o`.`Ammount`) AS `AmmountSum` 
FROM `Orders` `o` 
WHERE (`o`.`TraderId` = `t`.`TraderId`)) AS `Revenue`,(
SELECT SUM(`o`.`Ammount`) AS `SUM(o.Ammount)` 
FROM `Orders` `o` 
WHERE ((MONTH(`o`.`DeliveryDate`) = MONTH(CURDATE())) AND (YEAR(`o`.`DeliveryDate`) = YEAR(CURDATE())) AND (`o`.`TraderId` = `t`.`TraderId`))) AS `MonthRevenue`,(`t`.`RatingSum`/`t`.`RatingVotes`) AS `Rating`,(
SELECT CASE `rt`.`IsMonthlyBased` WHEN 1 THEN (
SELECT ((12 * ((YEAR(CURDATE()) 
       - YEAR(`t`.`LastPaidDate`))) 
     + (MONTH(CURDATE()) 
      - MONTH(`t`.`LastPaidDate`))) * `rt`.`Tax`)) END) AS `Debt` 
FROM ((`Traders` `t` 
LEFT JOIN `Users` `u` ON((`u`.`UserId` = `t`.`UserId`))) 
LEFT JOIN `RentTypes` `rt` ON((`rt`.`RentTypeId` = `t`.`RentTypeId`))) 

我不知道如何格式化代码,所以如果你可以复制并在编辑器中粘贴并看到它。谢谢。

所以视图正在工作。但去任何设计师(heideSql,工作台,Navicat的)时,撞上ALTER VIEW视图脚本获取生成错误:

SELECT `t`.`TraderId` AS `TraderId`,`t`.`ShopName` AS `ShopName`,`t`.`UserId` AS `UserId`,`t`.`CreatedOn` AS `CreatedOn`,`t`.`MOL` AS `MOL`,`u`.`Phone` AS `Phone`,`u`.`Email` AS `Email`,`rt`.`Name` AS `RentType`,(
SELECT SUM(`o`.`Ammount`) AS `AmmountSum` 
FROM `Orders` `o` 
WHERE (`o`.`TraderId` = `t`.`TraderId`)) AS `Revenue`,(
SELECT SUM(`o`.`Ammount`) AS `AmmountSumMonth` 
FROM `Orders` `o` 
WHERE ((MONTH(`o`.`DeliveryDate`) = MONTH(CURDATE())) AND (YEAR(`o`.`DeliveryDate`) = YEAR(CURDATE())) AND (`o`.`TraderId` = `t`.`TraderId`))) AS `MonthRevenue`,(`t`.`RatingSum`/`t`.`RatingVotes`) AS `Rating`,(
SELECT (CASE `rt`.`IsMonthlyBased` WHEN 1 THEN (
SELECT (((12 * (YEAR(CURDATE()) - YEAR(`t`.`LastPaidDate`))) + (MONTH(CURDATE()) - MONTH(`t`.`LastPaidDate`))) * `rt`.`Tax`) AS `((12 * ((YEAR(CURDATE()) 
       - YEAR(``t``.``LastPaidDate``))) 
     + (MONTH(CURDATE()) 
      - MONTH(``t``.``LastPaidDate``))) * ``rt``.``Tax``)`) END) AS `CASE ``rt``.``IsMonthlyBased`` WHEN 1 THEN (
SELECT ((12 * ((YEAR(CURDATE()) 
       - YEAR(``t``.``LastPaidDate``))) 
     + (MONTH(CURDATE()) 
      - MONTH(``t``.``LastPaidDate``))) * ``rt``.``Tax``)) END`) AS `Debt` 
FROM ((`Traders` `t` 
LEFT JOIN `Users` `u` ON((`u`.`UserId` = `t`.`UserId`))) 
LEFT JOIN `RentTypes` `rt` ON((`rt`.`RentTypeId` = `t`.`RentTypeId`))) 

我最后的选择列被产生两次,也有双引号(``)等上。那么我的错误在哪里?

回答

1

MySQL视图以MySQL快速解析和执行的格式存储,但与存储过程不同,您为创建视图输入的文本不会被存储。设计师提出的代码应该和原来的查询一样执行。

关键是将您的CREATE VIEW语句保存为.sql文件,并且当您要更改视图时打开该文件,请修改,然后复制并粘贴到MySQL中。

+0

就像我想的那样,谢谢。 – 2012-02-07 08:23:59