SQL 语法错误

Ste*_*lla 1 sql-server

SELECT 
    CONCAT_WS(' ',child_fname,child_sname) AS 'Child Name'
    , child_gender AS 'Gender'
    , child_dob AS 'DoB'
    , COUNT activity_name AS 'Activities name'
    , CONCAT_WS(' ', parent_title, parent_fname, parent_sname) AS 'Parent Name'
    , parent_phone AS 'Parent phone'
    , CONCAT_WS(' ', parent_address1, parent_address2, parent_town,
        parent_county parent_pcode) AS 'Parent Address',
FROM 
    Child,
    JOIN ChildActivity USING(child_id),
    JOIN Activities USING(activity_id),
    JOIN Parent USING(parent_id),
WHERE 
    activity_name='Art';
Run Code Online (Sandbox Code Playgroud)

查询浏览器说我有 error near 'AS Activities name... CONCAT_WS('',...at line 4.

如何解决此错误?

ype*_*eᵀᴹ 11

您的查询中有几个问题。

  • 首先,没有CONCAT_WS()功能。我假设您想连接字符串。+如果您使用的是 SQL-Server,请改用运算符:

    child_fname + ' ' + child_sname AS "Child Name",
    
    Run Code Online (Sandbox Code Playgroud)

    或者,如果您使用的是 MySQL,则||操作符或CONCAT()函数:

    child_fname || ' ' || child_sname AS "Child Name",
    
    Run Code Online (Sandbox Code Playgroud)

    或(更正,更新),只需保留该CONCAT_WS()功能,它适合您的情况,如果您使用的是 MySQL。

  • 其次,在错误的地方(在FROMand 和JOIN关键字之前)有几个逗号。

  • 第三,别名应该用双引号(如:)"Child Name"或方括号(如:)引用,或者[Child Name]如果它们没有特殊字符并且没​​有保留(如:),则根本不引用Gender。不要对列或表别名使用单引号。单引号用于字符串文字,例如'Art'. MySQL 也可能允许您在别名中使用它们,但不要陷入这种坏习惯。
  • 第四,COUNT()是一个(聚合)函数,它需要括号。但既然你没有GROUP BY,那么使用COUNT().
  • 最后,SQL-Server 不喜欢USING连接的语法,所以使用ON代替(它适用于所有 DBMS)。

因此,查询变为:

SELECT 
    CONCAT_WS(' ', child_fname, child_sname) AS "Child Name",
    child_gender AS Gender,
    child_dob AS DoB,
    activity_name AS "Activities name",
    CONCAT_WS(' ', parent_title, parent_fname, parent_sname) AS "Parent Name",
    parent_phone AS "Parent phone",
    CONCAT_WS(' ', parent_address1, parent_address2, parent_town, parent_county, parent_pcode)
      AS "Parent Address"                 --<-- Comma removed here.

--- for MySQL
FROM Child                                --<-- Also here
  JOIN ChildActivity USING(child_id)      --<-- and here
  JOIN Activities USING(activity_id)      --<-- and here
  JOIN Parent USING(parent_id)            --<-- and here.

--- for SQL-Server or MySQL
--- FROM Child 
---   JOIN ChildActivity ON ChildActivity.child_id = Child.child_id  
---   JOIN Activities ON Activities.activity_id = ChildActivity.activity_id  
---   JOIN Parent ON Parent.parent_id = Child.parent_id     

WHERE activity_name = 'Art' ;
Run Code Online (Sandbox Code Playgroud)