Mil*_*lic 4 mysql join subquery
我是 MySQL 编程新手,但有一个问题。我创建了这个查询:
SELECT *,
topics.createdate AS TopicCreateDate,
(SELECT (SELECT username
FROM users
WHERE id = topicanswers.userid)
FROM topicanswers
WHERE topicid = topics.id
ORDER BY id DESC
LIMIT 1) AS LastPost
FROM topics
INNER JOIN categories
ON topics.categoryid = categories.id
INNER JOIN users
ON topics.userid = users.id
ORDER BY topics.lastupdate DESC
Run Code Online (Sandbox Code Playgroud)
此查询列出所有Topics、联接类别和用户,UserID以及类别 IDTopics和Username来自TopicAnswersas LastPost。它命令它们LastUpdate在Topics由 控制的范围内下降TRIGER。
它工作得很好,但是这个子查询有一个问题:
(SELECT (SELECT username
FROM users
WHERE id = topicanswers.userid)
FROM topicanswers
WHERE topicid = topics.id
ORDER BY id DESC
LIMIT 1) AS LastPost
Run Code Online (Sandbox Code Playgroud)
它选择Username在主题最后发表的,从Users通过UserID从TopicAnswers作为LastPost,现在我想选择另一台一列Users,AvatarURL但我补充一下:
(SELECT username, avatarurl
FROM users
WHERE id = topicanswers.userid)
Run Code Online (Sandbox Code Playgroud)
它返回错误:
1241 操作数应包含 1 列
我怎样才能解决这个问题?
这是绝对正确的错误,您在主选择中选择单列,因此它必须只返回一列以避免冲突
为每一列做一个新的子选择:
(SELECT username
FROM users
WHERE id = topicanswers.userid) as username
(SELECT avatarurl
FROM users
WHERE id = topicanswers.userid) as avatarur1
Run Code Online (Sandbox Code Playgroud)
同样将与 TOP 级别选择相关:
(SELECT (SELECT username
FROM users
WHERE id = topicanswers.userid)
Run Code Online (Sandbox Code Playgroud)
如果在那里添加第二个查询 - 它会为 TOP Level SELECT 抛出错误
FROM topicanswers
WHERE topicid = topics.id
ORDER BY id DESC
LIMIT 1) AS LastPost
Run Code Online (Sandbox Code Playgroud)
你的查询应该是这样的:
SELECT *,
topics.createdate AS TopicCreateDate,
(SELECT (SELECT username
FROM users
WHERE id = topicanswers.userid)
FROM topicanswers
WHERE topicid = topics.id
ORDER BY id DESC
LIMIT 1) AS LastPost_name,
(SELECT (SELECT avatarur1
FROM users
WHERE id = topicanswers.userid)
FROM topicanswers
WHERE topicid = topics.id
ORDER BY id DESC
LIMIT 1) AS LastPost_avatarur1
FROM topics
INNER JOIN categories
ON topics.categoryid = categories.id
INNER JOIN users
ON topics.userid = users.id
ORDER BY topics.lastupdate DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4353 次 |
| 最近记录: |