【问题标题】:SQL - AS - table doesn't exist - 1146SQL - AS - 表不存在 - 1146
【发布时间】:2011-07-12 22:36:15
【问题描述】:

我的查询是:

SELECT temp.pid FROM 
(SELECT postid, date FROM swapping AS s, post AS p 
WHERE s.mid='2' AND p.postid=s.postid)  AS temp 
WHERE temp.date = (SELECT MAX(date) FROM temp)

我收到 #1146 - 表 'databasename.temp' 不存在

我怎样才能让它工作? 谢谢。

【问题讨论】:

    标签: mysql sql mysql-error-1146


    【解决方案1】:

    您似乎想选择最后一个“pid”,就“日期”而言,其中 s.mid='2'

    试试这个(在你弄清楚 pid 来自哪里并更正第一行之后)

    SELECT [s? or maybe p?].pid
    FROM swapping s INNER JOIN post p ON p.postid=s.postid
    WHERE s.mid = '2'
    ORDER BY date DESC
    LIMIT(0,1)
    

    您可能还需要按行为日期列添加别名。

    【讨论】:

    • 您的回答很有帮助。也许你知道为什么我的查询是错误的?
    • - 表 TEMP 不存在子查询 SELECT MAX(date) FROM temp(别名在外面,您必须从 aRealTableOrQuery 中选择 MAX(date))- temp.pid 是没有定义的。只有您在别名为“temp”的查询中选择的字段才能通过 temp.somefield 进行选择。因此,您的内部查询需要选择 pid 字段 - temp.date 可能会出错,某些(全部?)数据库类型需要在此处使用原始别名(因此,s.date 或 p.date)
    【解决方案2】:

    我认为您的列不正确...

    SELECT temp.pid  FROM  ( SELECT  postid, ...
    

    应该是

    SELECT temp.postid  FROM  ( SELECT  postid, ...
    

    【讨论】:

    • @lvil,那你能告诉我们更多的结构来知道什么是从哪里来的吗?
    【解决方案3】:

    @DRapp 至少一针见血。您没有在您称为 temp 的子选择中选择“pid”(如果该列存在于交换表或 post 表中),因此它会在那里引发某种类型的错误。

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 2014-02-03
      • 2019-02-18
      • 2014-07-26
      • 2018-01-29
      • 2012-11-05
      • 2018-09-12
      • 2016-06-14
      相关资源
      最近更新 更多