为什么我得到#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
wall_posts表结构如下所示 id date privacy pid uid message
id
date
privacy
pid
uid
message
Friends表结构如下所示 Fid id buddy_id invite_up_date status
Fid
buddy_id
invite_up_date
status
pid代表配置文件ID。我不太确定发生了什么。
UNION中的第一条语句返回四列:
SELECT b.id AS id, b.pid AS pid, b.message AS message, b.date AS date FROM wall_posts AS b
第二个返回 六 ,因为*扩展为包括以下所有列WALL_POSTS:
WALL_POSTS
SELECT b.id, b.date, b.privacy, b.pid. b.uid message FROM wall_posts AS b
在UNION与UNION ALL运营商要求:
UNION
UNION ALL
使用:
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))