【发布时间】:2019-11-11 10:45:08
【问题描述】:
我最近将一个应用程序从 MySQL 5.5 迁移到 MariaDB 10.3。 该应用程序的一部分是一个活动日历,用户可以在其中添加自己的活动,其中包含地址、城镇等详细信息。
我注意到运行该软件的其中一个查询不再适用于 MariaDB,尽管语法应该仍然没问题。
我尝试回到 MySQL 5.5 并且查询再次运行。 我还在 MariaDB 10.3 上的 phpMyadmin 中运行了查询,它显示了相同的结果,但以错误结束:
ERROR 1064:您的 SQL 语法有错误;检查手册 在 'UNION SELECT CONCAT(title_clang_1,' - ',street,' ',zip,' ',district,' ', town,' 在第 1 行
这是查询:
SELECT
'choose' label,
'' id
FROM
table_events
LIMIT
1
UNION
SELECT
CONCAT(
title_clang_1,
' - ',
street,
' ',
zip,
' ',
district,
' ',
town,
' ',
additional
) label,
id
FROM
table_events
WHERE
offline IS NULL || offline = '|0|'
“table_events”表包含此处列出的所有列:id、title_clang_1、street、zip、district、town、additional - 以及与此查询无关的更多列。
我希望输出所有离线字段填充为零或 NULL 的事件,但我收到了语法错误。
【问题讨论】:
-
' 离线为 NULL || offline = '|0|'' 我不相信这是 mysql 或 mariadb 语法,它应该做什么?
-
@P.Salmon
||(替代OR)被 MySQL 和 MariaDB 接受:mariadb.com/kb/en/library/or 和 dev.mysql.com/doc/refman/8.0/en/… -
@Madhur Bhaiya 谢谢我没有意识到这一点,仍然认为或不是;对 || 的开销并不大。
-
我在 mariadb 服务器版本中遇到的错误:10.1.14-MariaDB 是 ERROR 1221 (HY000):UNION 和 LIMIT 的使用不正确
-
更不用说在没有
ORDER BY的情况下使用LIMIT 1来选择“第一条”记录是毫无意义,正如ANSI/ISO SQL 标准表/结果集所定义的那样,orderless .. 该查询的结果将是非确定性(随机)以获得纯 100% 确定性(固定)的,您至少必须在ORDER BY子句中添加一个主要或唯一的列键。
标签: mysql database mariadb concat