我有一個模型A
其中has_many是我的B
模型(所以B模型引用A的外鍵a_id
)。 我想獲得所有未被任何B記錄引用的A記錄。使用活動記錄更有效的方法是哪種? 謝謝!有效記錄 - 獲取不存在關聯的記錄
0
A
回答
1
細節可能取決於你的數據庫,你創建的索引和數據存儲但我建議你給子查詢一試:
A.where.not(id: B.select(:a_id))
在PostgreSQL的,這將導致像單查詢:
SELECT * FROM as WHERE id NOT IN (SELECT a_id FROM bs)
3
由於導軌5的:
A.left_outer_joins(:bs).where(bs: { a_id: nil })
的在SQL的輸出爲:
SELECT "as".* FROM "as"
LEFT OUTER JOIN "bs" ON "bs"."a_id" = "a"."id"
WHERE "bs.a_id" IS NULL
+0
這裏的基準https://stackoverflow.com/a/45574301/2009803 – olimart
0
我在想你你的模型看起來像
class A < ApplicationRecord
has_may :bs
end
class B < ApplicationRecord
belongs_to :a
end
我想到你的schema.rb看起來像
create_table "as", force: :cascade do |t|
t.integer "id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "bs", force: :cascade do |t|
t.integer "id"
t.integer "a_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
,如果我有這那麼你應該可以做
A.where.not(id: B.select(:a_id))
相關問題
- 1. 有效的記錄關聯
- 2. 在Rails中獲取關聯記錄
- 3. 通過關聯有效記錄排序
- 4. Rails - 獲取關聯記錄的數據
- 5. 使用雙深關聯記錄獲取記錄
- 6. Rails的記錄不關聯
- 7. 當存在有效記錄時,有效記錄`find`返回nil
- 8. 根據關聯屬性獲取記錄
- 9. 獲取ms關聯記錄動態crm
- 10. Rails/Active Record has_and_belongs_to_many關聯 - 獲取記錄
- 11. 刪除記錄和所有相關記錄,即使沒有關聯記錄
- 12. 返回父記錄時有效獲取子記錄的計數
- 13. 獲取與其他模型記錄集關聯的所有模型記錄
- 14. 獲取關聯記錄數量小於特定數量的所有記錄
- 15. 獲取沒有相關記錄的記錄列表MySQL
- 16. 有效記錄根據子數據獲取父記錄
- 17. CakePHP HABTM查找所有有關聯記錄的記錄
- 18. 續集查詢獲取不在關聯中的記錄
- 19. 只返回記錄沒有記錄關聯在另一個表
- 20. ActiveRecord的 - 獲取所有相關記錄
- 21. 獲取記錄的所有關係
- 22. 使用關聯獲取所有相關記錄
- 23. 用於選擇相關記錄不存在的記錄的高效SQL查詢
- 24. 查找軌中沒有關聯記錄的記錄3
- 25. CakePHP 3查找沒有關聯記錄的記錄(hasMany)
- 26. Sequelize:根據關聯的屬於多個記錄查找記錄 - 但仍然返回所有關聯的記錄?
- 27. Rails有效地查詢記錄和最新關聯記錄,包括?
- 28. 獲取RoR 3中關聯的所有記錄
- 29. 如何獲取所有關聯的記錄?
- 30. 從關係獲取所有記錄?
Th正是我所需要的!我們很快就會接受答案。謝謝 –
謝謝@RonanLopes!如果查詢結果太慢,請發佈更新,我很樂意幫助您調整它。 :-) –