创建MySQL视图时case语句中出现语法错误

创建MySQL视图时case语句中出现语法错误,mysql,mysqli,Mysql,Mysqli,我在尝试创建视图时遇到mysql 1064错误 CREATE VIEW trip_summary AS select `driver_details`.`DriverId`, CONCAT(driver_details.Firstname, ' ', driver_details.Lastname, ' ', driver_details.TaxiPlateNo) AS TaxiDriver, count(taxi_trip.AutoId) AS TotalTrip, GROUP_CONCAT(

我在尝试创建视图时遇到mysql 1064错误

CREATE VIEW trip_summary AS select `driver_details`.`DriverId`, CONCAT(driver_details.Firstname, ' ', driver_details.Lastname, ' ', driver_details.TaxiPlateNo) AS TaxiDriver, count(taxi_trip.AutoId) AS TotalTrip, GROUP_CONCAT(taxi_trip.AutoId) AS TripIds, sum(taxi_trip.TripDistance) AS TotalTripDistance, sum(taxi_trip.TotalFare) AS TotalTripFare from `driver_details` left join `taxi_trip` on (`taxi_trip`.`DriverId` = `driver_details`.`DriverId` and `taxi_trip`.`PickupLAT` != 0 and `taxi_trip`.`DropLAT` != 0 and `taxi_trip`.`TotalFare` != 0) where taxi_trip.AutoId!=0 and 
  CASE WHEN `DriverIdFun`()!='' THEN taxi_trip.DriverId = `DriverIdFun`()
  END AS field1,
  CASE WHEN `From_Date`()!='' THEN taxi_trip.RequestDate >= `From_Date`()
  END AS field2,
  CASE WHEN `To_Date`()!='' THEN taxi_trip.RequestDate <= `To_Date`()
  END AS field3 group by taxi_trip.DriverId

这不是一个完整的答案,但可能包含足够的信息让您开始

通常,但并非每次,一组数据库表的视图都没有WHERE子句,在您的例子中,WHERE子句看起来就像狗的早餐

我将从这个简单得多的视图开始,并从这里开始

CREATE VIEW trip_summary AS 
SELECT 
  dd.`DriverId`, 
  CONCAT(dd.Firstname, ' ', dd.Lastname, ' ', dd.TaxiPlateNo) AS TaxiDriver, 
  count(tt.AutoId) AS TotalTrip, 
  GROUP_CONCAT(tt.AutoId) AS TripIds, 
  sum(tt.TripDistance) AS TotalTripDistance,
  sum(tt.TotalFare) AS TotalTripFare
FROM `driver_details` AS dd
LEFT JOIN `taxi_trip` AS tt 
ON tt.`DriverId` = dd.`DriverId` 
  AND tt.`PickupLAT` != 0 
  AND tt.`DropLAT` != 0 
  AND tt.`TotalFare` != 0
GROUP BY tt.DriverId
然后,在查询视图时,通过where子句选择要从视图中删除的内容和不希望删除的内容

SELECT * FROM trip_summary WHERE DriverID=1234;

这是创建我需要的视图的正确查询

CREATE VIEW trip_summary AS
select
`driver_details`.`DriverId`,
CONCAT(driver_details.Firstname, ' ', driver_details.Lastname, ' ',
driver_details.TaxiPlateNo) AS TaxiDriver,
count(taxi_trip.AutoId) AS TotalTrip,
GROUP_CONCAT(taxi_trip.AutoId) AS TripIds,
sum(taxi_trip.TripDistance) AS TotalTripDistance,
sum(taxi_trip.TotalFare) AS TotalTripFare
from `driver_details`
left join `taxi_trip`
on (`taxi_trip`.`DriverId` = `driver_details`.`DriverId`
and `taxi_trip`.`PickupLAT` != 0
and `taxi_trip`.`DropLAT` != 0
and `taxi_trip`.`TotalFare` != 0)
where taxi_trip.AutoId!=0
and
CASE
    WHEN `DriverIdFun`()!=''
        THEN taxi_trip.DriverId = `DriverIdFun`()
    ELSE
        TRUE
END
AND
CASE
    WHEN `From_Date`()!=''
        THEN taxi_trip.RequestDate >= `From_Date`()
    ELSE
        TRUE
END
AND
CASE
    WHEN `To_Date`()!=''
        THEN taxi_trip.RequestDate <= `To_Date`()
    ELSE
        TRUE
END
group by taxi_trip.DriverId 

你当然知道。这是无效的SQL。你从什么地方抄来的?你知道WHERE子句的作用和应该在哪里使用CASE吗?不知道。。我不知道在哪种情况下,那么在要求别人为你调试东西之前先学习SQL如何?寻求帮助有什么问题?我如何学习新东西?你通过阅读手册、代码等来学习新东西。你不是在这里学习,你显然有一些你不能做的工作,你正在要求其他人为你调试东西。你学的绝对是胡说八道,你在这里免费完成工作。您告诉我们您发现了如何创建视图、进行案例比较和联接,但您不知道WHERE子句是什么?你认为你是第一个对编程一无所知的人,并试图用SO来复制极客们提供的粘贴内容?顺便说一句,初学者可以解决这个问题。关于SQL,您知道0。不知道。。这是不正确的,因为我需要根据视图页面中所做的选择将值driver id、start date和end date作为参数传递。我想您误解了SQL视图是什么,它不是一个视图到单个项中,而是多个数据表作为一个表的表示。不管这个查看页面是什么,它都可能做错了。编辑示例以显示视图的代码page@bakoyaro有些人赢了,有些人输了:D sujivasagam似乎自己回答了这个问题,但他的答案实际上不是视图,而是视图中的完整SQL查询。