#1222 - 使用的SELECT语句具有不同的列数

Kev*_*erw 11 mysql sql mysql-error-1222

为什么我得到#1222 - 使用的SELECT语句有不同的列数?我正试图从这个用户朋友和他自己加载墙上的帖子.

SELECT u.id AS pid, b2.id AS id, b2.message AS message, b2.date AS date FROM 
(
    (
        SELECT b.id AS id, b.pid AS pid, b.message AS message, b.date AS date FROM 
        wall_posts AS b 
        JOIN Friends AS f ON f.id = b.pid 
        WHERE f.buddy_id = '1' AND f.status = 'b'
        ORDER BY date DESC
        LIMIT 0, 10
    )
    UNION
    (
        SELECT * FROM
        wall_posts
        WHERE pid = '1'
        ORDER BY date DESC
        LIMIT 0, 10
    )
    ORDER BY date DESC
    LIMIT 0, 10
) AS b2 
JOIN Users AS u
ON b2.pid = u.id
WHERE u.banned='0' AND u.email_activated='1'
ORDER BY date DESC
LIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)

wall_posts表结构看起来像 id date privacy pid uid message

Friends表结构如下 Fid id buddy_id invite_up_date status

pid代表个人资料ID.我不确定最近会发生什么.

OMG*_*ies 20

UNION中的第一个语句返回四列:

SELECT b.id AS id, 
       b.pid AS pid, 
       b.message AS message, 
       b.date AS date 
  FROM wall_posts AS b 
Run Code Online (Sandbox Code Playgroud)

第二个返回六个,因为*扩展为包括以下所有列WALL_POSTS:

SELECT b.id, 
       b.date, 
       b.privacy,
       b.pid. 
       b.uid message
  FROM wall_posts AS b 
Run Code Online (Sandbox Code Playgroud)

UNIONUNION ALL运营商要求:

  1. 组成UNION'd查询的所有语句中都存在相同数量的列
  2. 数据类型必须在每个位置/列匹配

使用:

FROM ((SELECT b.id AS id, 
             b.pid AS pid, 
             b.message AS message, 
             b.date AS date 
        FROM wall_posts AS b 
        JOIN Friends AS f ON f.id = b.pid 
       WHERE f.buddy_id = '1' AND f.status = 'b'
    ORDER BY date DESC
       LIMIT 0, 10)
      UNION
      (SELECT id,
              pid,
              message,
              date
         FROM wall_posts
        WHERE pid = '1'
     ORDER BY date DESC
        LIMIT 0, 10))
Run Code Online (Sandbox Code Playgroud)