mysql-error-1064 - mariadb 10.3.15 中出现 1064 错误,但 mysql 版本 5.5.62 上没有
问题描述
我希望有人能够指出 mysql 查询的哪一部分可能导致语法错误。
此查询在我们以前运行 mysql 5.5.62 的服务器上运行,但现在在 mariadb 版本 10.3.15 上显示错误
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_sku = ' w '
AND p.product_publish = 'Y'
LIMIT 0,10
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_name LIKE ' w %'
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE (p.product_name LIKE '% w %')
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_sku LIKE 'w%'
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_desc LIKE '% w %'
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_s_desc LIKE '% w %'
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE ((p.product_name LIKE '%w%'))
AND p.product_publish = 'Y'
LIMIT 0,10
)
我希望查询能够成功运行,但它会输出错误 1064 - 您的 SQL 语法有错误...
解决方案
您LIMIT
只能在 a 的最后一个子查询中使用UNION
。也许 MySQL [错误地] 允许您运行此查询,但 MariaDB 拒绝它。
解决方案?只需将第一个查询括在括号中,如下所示:
( -- enclosing parenthesis
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_sku = ' w '
AND p.product_publish = 'Y'
LIMIT 0,10
) -- enclosing parenthesis
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_name LIKE ' w %'
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE (p.product_name LIKE '% w %')
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_sku LIKE 'w%'
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_desc LIKE '% w %'
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE p.product_s_desc LIKE '% w %'
AND p.product_publish = 'Y'
LIMIT 0,10
)
UNION
(
SELECT p.product_id
,p.product_name
,p.product_thumb_image
FROM jos_vm_product AS p
WHERE ((p.product_name LIKE '%w%'))
AND p.product_publish = 'Y'
LIMIT 0,10
)
注意:请考虑LIMIT
-ing 行而不ORDER
-ing 它们可能会产生随机过滤。那是你要的吗?
推荐阅读
- reactjs - Gatsby:在构建时转换从页面查询返回的数据
- python-3.x - 如何为电报机器人正确使用网络抓取代码并发送消息?
- amazon-web-services - target_groups 可选参数不是可选的:terraform
- javascript - 如何在 redux-saga 的回调中使用 yield?
- python - 在 django 中的 veiws.py 和 template.html 之间传递数据
- javascript - 带有动画的jQuery滚动不会滚动到正确的位置
- xml - 所有子元素 XML/XSLT 的总和
- matlab - 如何获取第一个非单维的索引和大小?
- javascript - 如何为水平卡片拖动添加触摸事件?
- git - Git 子模块命令在 Windows 10 上非常慢