mysql - CONCAT 上的 SQL 代码有什么问题?

标签 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’
;

我收到此错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM ‘Customer’ ORDER BY ‘CustomerID’, CONCAT(‘FirstName,’ ‘ ’, ' at line 2

最佳答案

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

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

反引号看起来像这样:

``

单引号如下所示:

''

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

我还在您的 CONCAT() 中看到了一个错误。当逗号本应位于引号之外时,引号内出现了逗号。你有这个:

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

应该是这样的:

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

您可以这样编写 View :

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;

关于mysql - CONCAT 上的 SQL 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44221158/

相关文章:

mysql - mysql Group concat 有最大限制吗?

java - 在 Java 中连接 mp3 文件

mysql - 外键和主键的sql fiddle 代码

mysql - 将数据从 My Sql 导入到 Sql Server 的最简单方法

MySQL InnoDB select for update 和 insert 之间出现死锁

mysql - 用于软件开发的 Mssql 与 mysql

php - 如何不使用 Doctrine 将对象持久化到实体内部?

Python:合并数据框并将所有值保留在单元格中(如果不相同)

MySQL 查询选择所需的最后一个日期,但具有与该日期根本不相关的不同列值

mysql - timestampdiff() 参数错误