2015-04-23 96 views
2

我有一個PostUser頂點,由Posted邊相關。OrientDB查詢沒有從另一個頂點的特定邊的頂點

我想檢索與特定用戶沒有發佈關係的帖子。

這裏是我的SQL查詢:

SELECT posts.* FROM posts WHERE posts.user_id != 19. 

我不能這樣做

SELECT FROM Post WHERE user.id != 19

,因爲我沒有階級之間的聯繫,我有邊緣。

我該如何解決問題?

回答

1
create class User extends V 
create class Post extends V 

create class Posted extends E 

create vertex User set name = 'user1'  
create vertex User set name = 'user2'  

create vertex Post set name = 'post0' 
create vertex Post set name = 'post1' 
create vertex Post set name = 'post2' 

create edge Posted from (select from Post where name = 'post0') to (select from User where name = 'user1') 
create edge Posted from (select from Post where name = 'post1') to (select from User where name = 'user1') 
create edge Posted from (select from Post where name = 'post2') to (select from User where name = 'user2') 

如果你有類似上述的東西,和例如,你想知道的不是USER1相關的所有帖子(這將是POST2)。假設記錄ID爲用戶1#12:0

您可以:

select from Post where #12:0 not in out('Posted') 
// or 
select expand(in('Posted')) from (select from User where @rid not in [#12:0]) 

輸出: enter image description here


UPDATE

您也可以使用用戶的名稱,而不是它的@rid

select * from Post where $record_id.rid[0] not in out('Posted') 
let $record_id = (select @rid from User where name = 'user1') 

但要注意的是,子句爲每執行一次(在這種情況下,3次)。這意味着當你有很多帖子時它不會很有效率。

+0

在第一個例子中:我怎樣才能做到這一點,但我沒有@rid,我有用戶的名字來檢查? –

+0

看到我上面的更新。 – vitorenesduarte

相關問題