我在CONCAT上的SQL代码有什么问题?

时间:2017-05-27 20:05:50

标签: mysql concatenation sqlfiddle

CREATE VIEW ‘CustomerView’ AS SELECT
FROM ‘Customer’
ORDER BY ‘CustomerID’, CONCAT(‘FirstName,’ ‘ ’, ‘LastName’) AS ‘CustomerName’, ‘StreetAddress’, ‘Apt’, ‘City’, ‘State’, ‘ZipCode’, ‘HomePhone’, ‘MobilePhone’, ‘OtherPhone’
;

我收到此错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在'客户'附近使用ORDER BY'CustomerID',CONCAT('FirstName,''','在第2行

2 个答案:

答案 0 :(得分:2)

你错过了一个逗号

ORDER BY ‘CustomerID’, CONCAT(‘FirstName,’, ‘ ’, ‘LastName’) AS  .....

另一种更简单的方法是在Firstname之后添加空格:

ORDER BY ‘CustomerID’, CONCAT(‘FirstName, ’, ‘LastName’) AS  .....
  

<强>更新

另外:

CREATE VIEW ‘CustomerView’ AS SELECT **"......"**

您没有说明要选择哪些列,如果要选择所有列,只需添加*

CREATE VIEW CustomerView AS 
SELECT CONCAT(FirstName, ' ', LastName) AS CustomerName,
...
...
FROM `Customer`
ORDER BY `CustomerID`;

答案 1 :(得分:2)

看起来您在表和列标识符周围使用智能引号。你永远不应该在代码中使用智能引号。没有使用这些字符的编码语言。

您也不会在标识符周围使用单引号。 MySQL默认使用反引号作为标识符。单引号用于SQL中的字符串文字或日期文字。

背引号如下:

``

单引号如下:

''

此外,您似乎已将列放在ORDER BY子句之后。我认为你需要学习SELECT的语法。

我在你的CONCAT()中也看到了一个错误。它应该在引号之外的引号内有逗号。你有这个:

CONCAT(‘FirstName,’ ‘ ’, ‘LastName’)

应该是这样的:

CONCAT(`FirstName`, ' ', `LastName`)

你会写这样的观点:

CREATE VIEW `CustomerView` AS 
  SELECT CONCAT(`FirstName`, ' ', `LastName`) AS `CustomerName`, 
  `StreetAddress`, 
  `Apt`, 
  `City`, 
  `State`, 
  `ZipCode`, 
  `HomePhone`, 
  `MobilePhone`, 
  `OtherPhone`
FROM `Customer`
ORDER BY `CustomerID`;

在您的示例中,后引号是可选的。如果您的标识符与SQL保留字冲突,或者标识符包含空格或特殊字符(标点符号,国际符号等),则需要它们。这些案例都不适用于您的示例。所以你可以在没有反引号的情况下编写它就好了:

CREATE VIEW CustomerView AS 
  SELECT CONCAT(FirstName, ' ', LastName) AS CustomerName, 
  StreetAddress, 
  Apt, 
  City, 
  State, 
  ZipCode, 
  HomePhone, 
  MobilePhone, 
  OtherPhone
FROM Customer
ORDER BY CustomerID;