【发布时间】:2013-05-08 23:21:09
【问题描述】:
我正在跟踪用户是否喜欢和/或对其他人发布的对象列表中的对象投票。我可以获得喜欢和投票,但不能同时获得两者。 (一个人可以对一个对象点赞和投票,这些选项并不相互排斥)。
为了简化这个问题,让我用关系术语来描述它(使用左连接 - 始终返回对象,仅当存在该类型的记录时才返回喜欢者和投票者数据)
[object]+ -> liker
+ -> voter
我想返回的是:
objectID likerID voterID
2343 null 88
2345 11 null
2382 44 1256
2400 null null
然而,无论我以哪种方式切片,我都无法让它像那样出来。要么跳过第 2400 行(我已经尝试过 where 的所有组合),要么值甚至从 likerID 转移到 voterID 列(错误?)。
这是一个密码示例:
start objects=node(158)
match contestant-[:POSTED]->object_node-[:POSTED_OBJECT]->objects<-[?:POSTED_OBJECT]-object_node_a<-[?:LIKES]-liker
, objects<-[?:POSTED_OBJECT]-object_node_b<-[?:VOTES]-voter
return id(object, id(liker), id(voter)
即使我尝试 where id(object_node_a) = id(object_node_b)... 也不起作用...
如果我只是尝试获得一个喜欢它的人,它会起作用.. 与选民一样.. 但是当我尝试同时做这两个时.. 炸弹..
我尝试过使用 where 等,但最终我没有得到完整的对象列表 - 它要么根据匹配项修剪列表,要么给我 distinct 无法解析的笛卡尔积。
SQL 示例:左连接
我是一个 sql 人,所以让我这样解释一下 - 我在左侧有一个 objects 表,我想将它左连接到一个 liker 表和一个 voter 表,并返回 liker id 和 voter id 与对象数据一起在一行上。无论是否有投票者或喜欢者记录,都会返回所有对象记录。
[object]+ -> liker
+ -> voter
这可能吗?
是否可以通过密码来做到这一点?
【问题讨论】: