postgresql 自联接查询

guicsvcw  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(122)

我有一些购买,它们可能(也可能没有)有一个关联的子购买,我用一个自连接将其建模为:

class Purchase < ApplicationRecord
  has_one :sub_purchase, class_name: 'Purchase', dependent: :destroy
  belongs_to :main_purchase, class_name: 'Purchase', foreign_key: 'purchase_id', optional: true
end

购买具有属性状态,其可以是“活动”。主采购处于活动状态时,如何查询子采购?
或许是和这个差不多的?:

Purchase.where.not(purchase_id:nil).where(main_purchase: {status: 'active'})

UPDATE:在SQL中,我发现我可以给purchases表设置两次别名,并执行如下操作:

SELECT
FROM
purchases p1 INNER JOIN purchases p2 ON p2.id = p1.purchase_id
WHERE p2.status='active';

但如果可以避免的话,最好不要直接使用SQL。

xzv2uavs

xzv2uavs1#

但实际上并没有尝试:

Purchase.joins(:main_purchase).where(main_purchase: {status: 'active'})

相关问题