mysql - UNION SELECT CONCAT 在 MariaDB / MySQL 之间的工作方式不同
问题描述
我最近将一个应用程序从 MySQL 5.5 迁移到 MariaDB 10.3。该应用程序的一部分是一个事件日历,用户可以在其中输入他们自己的事件,其中包含地址、城镇等详细信息。
我注意到运行该软件的其中一个查询不再适用于 MariaDB,尽管语法应该仍然没问题。
我试图回到 MySQL 5.5 并且查询再次起作用。我还在 MariaDB 10.3 上的 phpMyadmin 中运行了查询,它显示了相同的结果,但以错误结束:
ERROR 1064:您的 SQL 语法有错误;检查手册以在第 1 行的 'UNION SELECT CONCAT(title_clang_1,' - ',street,' ',zip,' ',district,' ', town,' 附近使用正确的语法
这是查询:
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、region、town、additional - 以及与此查询无关的更多列。
我希望输出所有离线字段填充为零或 NULL 的事件,但我得到一个语法错误。
解决方案
我很确定你的这个查询在 MySQL 中也不起作用(至少在较新的版本中)。MySQL 文档明确指出:
要将 ORDER BY 或 LIMIT 应用于单个 SELECT,请将子句放在括住 SELECT 的括号内
您需要在各个SELECT
查询块周围使用括号,就像您LIMIT
在第一个查询中使用的那样:
(
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|'
)
推荐阅读
- python - Flask-SQLAlchemy:具有生成属性的声明性模型
- python - 如何解析 XML 并存储为列表(python)
- php - 未应用 RewriteRule
- python-3.x - 使用 Reportlab 创建 PDF 时出错
- amazon-web-services - 更新 ECS 服务时 AWS ECS websocket 连接耗尽
- azure - 将源文件名传递到 ADFv1 管道中的目标
- javascript - 将地图 [[entries]] 转换为对象 (javascript)
- android - 管理活动堆栈的问题
- facebook - 如何向 Facebook 提供截屏视频以供应用审核
- hadoop - 使用 RPC 库在 Fedora 28 上构建 Hadoop 3.0.3 问题