select t1.*,(select `key` from recommend r inner join recommend_ref_news rrn on r.id=rrn.recommend_id and rrn.news_id=t1.id) as recommend from news t1
原因:个人猜测,括号里的子查询是先执行的,所以没有t1,
不知道为什么mysql要先执行子查询,个人感觉这是很脑残的,按道理这样的sql语句是一个很普通不应该报错的,在oracle下运行是完全没有问题的。
既然,前面t1.*,能拿到t1,为什么在后面的子查询居然还拿不到t1了???
解决办法:将on里的and rrn.news_id=t1.id挪到where里就行了,正确代码如下:
select t1.*,(select `key` from recommend r inner join recommend_ref_news rrn on r.id=rrn.recommend_id where rrn.news_id=t1.id) as recommend from news t1