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

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐