执行使用 UNION 运算符的查询时,必须确保涉及的所有单独 SELECT 语句都遵守两个基本标准:
考虑提供的查询:
SELECT * FROM friends
LEFT JOIN users AS u1 ON users.uid = friends.fid1
LEFT JOIN users AS u2 ON users.uid = friends.fid2
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1 错误消息表明由 UNION 连接的两个 SELECT 语句之间的列计数存在差异。具体来说,第一个 SELECT 语句返回所涉及表中的所有列,而第二个 SELECT 语句仅获取 fid2 列。
解决方案
要解决此问题,第二个 SELECT 语句应修改为匹配第一个语句的列数。最简单的方法是显式包含所有所需的列:
SELECT f.*, u.*
FROM FRIENDS AS f
JOIN USERS AS u ON u.uid = f.fid2
WHERE f.fid1 = 1
AND f.fid2 > 1
UNION
SELECT f.*, u.*
FROM FRIENDS AS f
JOIN USERS AS u ON u.uid = f.fid1
WHERE f.fid2 = 1
AND f.fid1 或者,可以使用 UNION ALL 运算符,该运算符允许具有不同列数的 SELECT 语句。但是,不匹配的列将填充 NULL 值,这可能并不在所有情况下都是理想的。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3