首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql错误'where子句‘中未知列'tv.last_time’

mysql错误'where子句‘中未知列'tv.last_time’
EN

Stack Overflow用户
提问于 2018-11-28 06:21:04
回答 1查看 75关注 0票数 2

当我使用mysql进行子查询时,我在“where子句”中得到了未知的列'tv.last_time‘,我该怎么办?在执行子查询时,我希望使用外部条件筛选出不符合条件的记录。

代码语言:javascript
复制
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

数据库模式:

代码语言:javascript
复制
CREATE TABLE `info_topic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'topic name',
  `summary` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'summary`',
  `create_time` datetime DEFAULT NULL COMMENT '',
  `sort` int(11) DEFAULT '0' COMMENT '',
  PRIMARY KEY (`id`),
);

CREATE TABLE `info_topic_visit` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `topic_id` int(11) DEFAULT '0' COMMENT '',
  `user_id` int(11) DEFAULT '0' COMMENT '',
  `last_time` datetime DEFAULT NULL COMMENT '',
  PRIMARY KEY (`id`)
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 06:31:00

子查询的问题是,tv别名在那里没有任何意义,因此您不能引用该别名对应的表中的任何内容。一种方法是将子查询转换为select子句中的相关子查询:

代码语言:javascript
复制
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;

还可能有一种方法来重构您的查询,使您不需要使用关联子查询,这是低效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53513296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档