2011-03-10 72 views
1

我的查询是:SQL - AS - 表不存在 - 1146

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' 不存在

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

回答

4

好像你要选择的最后一个“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) 

您可能还需要按行按顺序别名日期列。

+0

您的回答非常有帮助。也许你知道我为什么查询错误? – lvil 2011-03-11 12:11:32

+0

- 对于子查询SELECT MAX(date)FROM temp不存在表TEMP(别名在外,您必须从aRealTableOrQuery中选择MAX(date)) - temp.pid未定义。只有您在查询别名'temp'中选择的字段才可以通过temp.somefield进行选择。所以你的内部查询需要选择pid字段 - temp.date可能会给出错误,一些(所有?)数据库类型需要在这里使用原始别名(所以,s.date或p.date) – James 2011-03-11 19:50:12

1

我觉得你有你的列不正确......

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

应该

SELECT temp.postid FROM (SELECT postid, ... 
+0

谢谢,但这些是两个不同的领域。 pid!= postid – lvil 2011-03-10 18:21:58

+0

@lvil,那么你能告诉我们更多的结构来知道从哪里来的? – DRapp 2011-03-10 18:29:07

0

@DRapp至少击中了要害。您没有在子选择中选择'pid'(如果该列存在于交换表或张贴表中),那么您将引用temp作为临时值,以便在那里引发某种类型的错误。

相关问题