0

Rails 3 アプリに次のモデルがあり、要件を選択します。

class Item < AR
has_many :holdings

class Holding < AR
belongs_to :item

Holding モデルには「アクティブな」ブール値があります。

「アクティブな」所蔵が 0 の各アイテムを見つけたい (関連付けられている所蔵はいくつでもある可能性があります)。かなりの数の組み合わせを試しました。

SELECT * from items JOIN
(SELECT holdings.item_id, count(ifnull(item_id,0)) AS hcount FROM holdings
WHERE holdings.active = "t"
GROUP BY holdings.item_id
HAVING hcount = 0)
ON items.id = holdings.item_id

ただし、これは 0 より大きいカウントのみを返します。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

1

何かを意味する場合は count を使用しないでください。

not exists 句を使用します。

SELECT * from items i
where not exists(select holdings.item_id 
             from holdings 
             where holdings.active = 't' 
               and holdings.item_id = i.item_id)

英語でのこのステートメントは、所蔵に一致する行がないアイテムからすべての行を私にくださいと言います。

于 2010-11-21T23:37:16.273 に答える