mysql子查询错误未知列';上一次';在';其中第'条;
当我使用mysql进行子查询时,在“where子句”中会出现未知列“tv.last_time”,我该怎么办?在执行子查询时,我希望使用外部条件筛选出不符合要求的记录mysql子查询错误未知列';上一次';在';其中第'条;,mysql,subquery,Mysql,Subquery,当我使用mysql进行子查询时,在“where子句”中会出现未知列“tv.last_time”,我该怎么办?在执行子查询时,我希望使用外部条件筛选出不符合要求的记录 SELECT info_topic.*, b.newMessage FROM info_topic LEFT JOIN `info_topic_visit` AS tv ON tv.topic_id = info_topic.id AND tv.user_id = 225 LEFT JOIN ( SELECT
SELECT
info_topic.*, b.newMessage
FROM
info_topic
LEFT JOIN `info_topic_visit` AS tv ON tv.topic_id = info_topic.id
AND tv.user_id = 225
LEFT JOIN (
SELECT
p.topic_id,
count(*) AS newMessage
FROM
info_post p
WHERE
p.create_time > tv.last_time
GROUP BY
p.topic_id
) AS b ON b.topic_id = info_topic.id
ORDER BY b.newMessage DESC
数据库架构:
子查询的问题是,
tv
别名在那里没有任何意义,因此无法引用该别名对应的表中的任何内容。一种方法是在select子句中将子查询转换为相关子查询:
SELECT
i.*,
(SELECT COUNT(*) FROM info_post p
WHERE p.create_time > tv.last_time AND p.topic_id = i.id) AS newMessage
FROM info_topic i
LEFT JOIN info_topic_visit AS tv
ON tv.topic_id = info_topic.id AND tv.user_id = 225
LEFT JOIN info_topic_member tm
ON i.id = tm.topic_id AND
tm.del_flag = 0 AND
tm.apply_status = i.open_type AND
tm.user_id = 225
WHERE
i.del_flag = 0 AND
i.id > 0 AND
tm.id IS NOT NULL
ORDER BY
newMessage DESC;
可能还有一种方法可以重新构造查询,这样您就不需要使用效率低下的相关子查询。您可以将查询中使用的表的数据库架构与一些示例数据共享吗。还有,您想要的输出数据是什么。好的,我将简化它。您可能需要等待一点,看看是否有人可以做得更好。现在,你可以用这个。
SELECT
i.*,
(SELECT COUNT(*) FROM info_post p
WHERE p.create_time > tv.last_time AND p.topic_id = i.id) AS newMessage
FROM info_topic i
LEFT JOIN info_topic_visit AS tv
ON tv.topic_id = info_topic.id AND tv.user_id = 225
LEFT JOIN info_topic_member tm
ON i.id = tm.topic_id AND
tm.del_flag = 0 AND
tm.apply_status = i.open_type AND
tm.user_id = 225
WHERE
i.del_flag = 0 AND
i.id > 0 AND
tm.id IS NOT NULL
ORDER BY
newMessage DESC;