错误:SELECT 语句中的列计数不一致
在 MySQL 中,UNION 和 UNION ALL 操作要求参与的 SELECT 语句拥有相同的列数SELECT 子句中的列数。此外,每个位置的列的数据类型必须对应。
提供的查询违反了此规则:
<code class="sql">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 < 1) ORDER BY RAND() LIMIT 6;
第一个 SELECT 语句返回“friends”和“ users”表,而第二个 SELECT 语句仅返回“friends”表中的“fid2”列。列计数的这种差异会导致以下错误消息:
<code class="error">ERROR 1222 (21000): The used SELECT statements have a different number of columns from the following:
要解决该错误,请确保 UNION 操作中的所有 SELECT 语句具有相同的列数。实现此目的的最简单方法是在每个 SELECT 语句中使用显式列列表:
<code class="sql">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 < 1 ORDER BY RAND() LIMIT 6;</code>
通过在每个 SELECT 语句中显式指定列,MySQL 可以确保列数和数据类型匹配,从而允许UNION 操作可以无错误地继续进行。
以上是如何修复 MySQL UNION 操作中的'错误 1222 (21000):使用的 SELECT 语句具有不同的列数”?的详细内容。更多信息请关注PHP中文网其他相关文章!