所以我有这个HIVE查询。
SELECT p.id
FROM posts p JOIN
comments c ON c.postid = p.id JOIN
users u ON u.id = p.owneruserid JOIN
badges b ON b.userid = u.id CROSS JOIN
postlinks l
WHERE l.relatedpostid > p.id
AND u.upvotes IN (SELECT MAX(upvotes) AS uv FROM users uu WHERE uu.creationdate > p.creationdate);
然后它给了我这个错误:
编译语句时出错: FAILED: SemanticException [Error 10249]: line 21:58 Unsupported SubQuery Expression 'createdate': SubQuery表达式同时指向Parent和SubQuery表达式,并且不是一个有效的连接条件。
但是我没有看到我的SubQuery表达式怎么会同时引用父和子Query呢!?
我特别使用了 user uu
以区别 user u
和p.createdate从父查询中获取,并且p.createdate 必须 在我的例子中,与父查询有关。
正如本篇所述 岗位 alreadyHIVE在子查询方面有一些限制。
但是我没有看到我是如何打破这些限制的。
我到底做错了什么?
感谢任何帮助。
EDIT:
所使用的数据,是stackexchange数据的摘录。所以帖子指的是stackexchange的帖子等等。
表。
徽章(id,class,date,name,tagbased,userid)
意见(id,createdate,postid,score,text,userdisplayname,userid)
帖子链接(id,createdate,linktypeid,postid,relatedpostid)
员额(id,acceptedanswerid,answerercount,body,closeddate,commentcount,communityowneddate,createdate,favoritecount,lastactivitydate,lasteditdate,lasteditordisplayname,lasteditoruserid,ownerdisplayname,owneruserid,parentid,posttypeid,score,tags,title,viewcount)
标签(id,count,excerptpostid,tagname,wikipostid)
用户(id,aboutme,accountid,createdate,displayname,downvotes,lastaccessdate,location,profileimageurl,reputation,upvotes,view,websiteurl)
投票(id,bountyamount,createdate,postid,userid,votetypeid)
我主要是对如何能写出
SELECT p.id FROM posts p JOIN users u ON u.id = p.owneruserid
WHERE u.upvotes IN
(SELECT MAX(upvotes) FROM users uu WHERE uu.creationdate > p.creationdate)
这样它就不会给我这个错误。
如果你想知道限制列表,你需要看一看 文件. 相关的限制是。
引用父查询中某一列的子查询谓词必须使用equals(=)谓词操作符。
子查询中没有平等子句。 正如我在原来的问题中提到的,你应该提出一个问题,并附上样本数据、期望的结果以及对代码应该做什么的解释。
在你的查询中,两个麻烦的比较都是非常不寻常的。 正常情况下,这种比较会有一个平等比较。 这个查询正在做 东西也许有更好的方法来完成你想要的东西。 只是不清楚自己想要什么。