关于SQL View,我有些困惑

时间:2014-11-22 20:09:35

标签: mysql sql view count phpmyadmin

我有这些表格:

  • BRANCH(Bno,Street,Area,City,Pcode,Tel_No,Fax_No)
  • STAFF(Sno,Fname,Lname,Address,Tel_No,Position,Sex,DOB,Salary,NIN,Bno)
  • PROPERTY_FOR_RENT(Pno,Street,Area,City,Pcode,Type,Rooms,Rent,Ono,Sno,Bno)

要创建一个视图BranchStatsBno, NumStaff, NumProps),对于任何分支,它都表示所雇用的工作人员数量和属性处理数量。

CREATE VIEW BranchStats
AS 
   SELECT 
       branch.Bno Bno,
       Count (Distinct Staff.Bno) NumStaff,
       Count (Distinct property_for_rent.Sno) NumProps
   FROM 
       branch
   JOIN 
       Staff ON Staff.Bno = branch.Bno
   JOIN 
       property_for_rent ON property_for_rent.Sno = Staff.Sno
   GROUP BY 
       branch.Bno

错误

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'独特的staff.Bno)NumStaff,Count(Distinct   property_for_rent.Sno)Num'在第4行

我的SQL语句有什么问题吗?需要帮助

1 个答案:

答案 0 :(得分:3)

MySQL(默认情况下)不允许在函数名和开始表之间留一个空格。所以,尝试删除这些空格:

CREATE VIEW BranchStats AS 
   SELECT branch.Bno,
          Count(Distinct Staff.Bno) as NumStaff,
          Count(Distinct property_for_rent.Sno) as NumProps
   FROM branch JOIN 
        Staff
        ON Staff.Bno = branch.Bno JOIN 
        property_for_rent
        ON property_for_rent.Sno = Staff.Sno
   GROUP BY  branch.Bno;

documentation

中对此进行了解释
  

[。 。 。]解析器使用以下规则   默认情况下,区分他们的名字是否被用作   函数调用或非表达式上下文中的标识符:

     
      
  • 要在表达式中将名称用作函数调用,名称和后面的“(”括号之间必须没有空格   字符。

  •   
  • 相反,要使用函数名作为标识符,不能立即使用括号。

  •   
     

要求函数调用没有空格   名称和括号之间仅适用于内置函数   有特殊考虑的功能。 COUNT就是这样一个名字。