我們正在嘗試創建一個可以簡化爲博客示例的ActiveRecord查詢,以便於理解。我們如何找到沒有任何評論留下的所有博客文章?Rails - 查找所有沒有任何具有特定值的子項的條目
只要某些評論不是特定用戶,我們當前的查詢就會返回帖子,但是如果有任何評論是由該用戶編寫的,我們需要排除博客文章。有任何想法嗎?
我們正在嘗試創建一個可以簡化爲博客示例的ActiveRecord查詢,以便於理解。我們如何找到沒有任何評論留下的所有博客文章?Rails - 查找所有沒有任何具有特定值的子項的條目
只要某些評論不是特定用戶,我們當前的查詢就會返回帖子,但是如果有任何評論是由該用戶編寫的,我們需要排除博客文章。有任何想法嗎?
最適合的sql語法應該是「not exists」子句。外連接也很受歡迎,但這往往是出於歷史原因,因爲RDBMS查詢優化器不擅長優化包含多條記錄的查詢。
如今一個體面的優化器可以impliment與不存在使用適當的如哈希反連接批量數據進行處理的查詢。
查詢會...
select *
from posts
where not exists (
select null
from comments
where comments.post_id = posts.id and
comments.user_id = 38)
在軌發言...
Post.where("not exists (select null from comments where comments.post_id = posts.id and comments.user_id = #{user.id}")
UPDATE:
在軌道更好的語法:
Post.where.not(Comment.where("comments.post_id = posts.id").where(:user_id => user.id}).exists)
Post.joins("LEFT JOIN comments ON posts.id = comments.post_id AND user_id = #{user_id}").where("comments.id IS NULL")
這正是我們需要的!謝謝您的幫助。 –
這太棒了!它應該包含在activerecord中! –
這是輝煌! – saadlulu