You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用UNION ALL联合查询遇#1064语法错误,求SQL修正方案

修正后的SQL语法及问题说明

错误原因分析

  1. 语法错误:UNION ALL右侧的子查询不需要添加别名as table2,这是直接触发#1064报错的原因。
  2. 列数不匹配:UNION ALL要求左右两个查询返回的列数必须完全一致,且对应列的数据类型需兼容。你的第一个子查询返回2列(ID、url),第二个返回4列(ID、post_title、post_content、post_date),列数不匹配,即使修复语法后仍会报错。

修正方案示例

根据你的需求,这里提供两种常见的修正方式:

方案1:统一为4列结构(用NULL填充缺失列)

如果需要保留第二个查询的4列字段,给第一个查询补充对应空列:

SELECT ID, url, NULL AS post_content, NULL AS post_date
FROM (
    SELECT company_id AS ID, CONCAT('https://example.com/axy/', `slug`) AS url
    FROM company22 c
    WHERE company_name LIKE '%xyz%' AND c.is_active = 1 AND admin_approved = 1
    ORDER BY company_id DESC LIMIT 0, 1
) AS table1
UNION ALL
SELECT ID, post_title, post_content, post_date
FROM `wp_posts`
WHERE post_content LIKE '%xyz%' AND post_status = 'publish' AND post_type='table'
ORDER BY post_date DESC;

方案2:统一为2列结构(调整第二个查询的返回列)

如果只需要两列数据,调整第二个查询仅返回对应字段:

SELECT ID, url
FROM (
    SELECT company_id AS ID, CONCAT('https://example.com/axy/', `slug`) AS url
    FROM company22 c
    WHERE company_name LIKE '%xyz%' AND c.is_active = 1 AND admin_approved = 1
    ORDER BY company_id DESC LIMIT 0, 1
) AS table1
UNION ALL
SELECT ID, post_title AS url
FROM `wp_posts`
WHERE post_content LIKE '%xyz%' AND post_status = 'publish' AND post_type='table'
ORDER BY ID DESC;

关键注意事项

  • UNION ALL仅要求左右查询的列数、数据类型兼容,列名可以不一致(最终结果列名以左侧查询为准)。
  • 若需对联合后的整体结果排序,将ORDER BY放在语句末尾;若要单独对子查询排序,必须配合LIMIT(否则MySQL会忽略子查询内的ORDER BY)。

内容的提问来源于stack exchange,提问作者Naren Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 07:10:01