在dev机器上进行子选择,但不是实时的,使用相同的数据库,并且都运行mysql 5.1

时间:2011-10-02 17:46:01

标签: mysql

此查询在我的开发机器上运行完美,这是一台带有mysql 5.1.53的PC

 SELECT DISTINCT * 
 FROM   posts P1
 WHERE  user_id IN (2,1000001) AND NOT track_id = 34 AND
        (SELECT COUNT(*) FROM posts P2 
            WHERE P2.user_id = P1.user_id AND P2.id > P1.id AND P2.track_id <> 34)
         <= 1
 GROUP BY 
        track_id 
 ORDER BY 
        id desc LIMIT 5

当我在我的实时服务器(debian,mysql 5.1.39)上的同一个数据库中运行相同的代码时,我收到此错误:

Unknown column 'P1.user_id' in 'where clause': 

怎么会这样?有什么想法吗?

服务器上show create table posts的结果

CREATE TABLE `posts` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`track_id` int(11) unsigned DEFAULT '0',
`tag_id` int(11) unsigned DEFAULT NULL,
`user_id` int(11) DEFAULT '0',
`comment` tinytext,
`created_at` datetime DEFAULT NULL,
`commentcount` tinyint(11) unsigned DEFAULT '0',
PRIMARY KEY (`id`),
KEY `track_id` (`track_id`),
KEY `tag_id` (`tag_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=484 DEFAULT CHARSET=utf8 |

1 个答案:

答案 0 :(得分:0)

正如很多评论所暗示的那样,这是一个区分大小写的问题。在服务器上的SQL查询中,posts的别名设置为“p1”,但是subselect正在寻找“P1”。错误。