3

列 ItemID と列 ItemInfo を持つアイテムを表すテーブル 1 があります。次に、列 ItemID (親)、列 SubItemID、および列 SubItemInfo を持つ SubItem を表すテーブル 2 があります。

これを使用して、各アイテムのすべてのサブアイテムの数を取得しようとしています:

select items.itemID, count(*) as count 
from items, subItems 
where subItems.itemID=items.itemID group by itemID

サブアイテムがないアイテムを除いて、正常に機能します。サブアイテム数が 0 のアイテム行を返す代わりに、その行は単に存在しません。

最初のテーブル (アイテム) のすべての行を強制的に選択する効率的な方法はありますか?

4

2 に答える 2

3

次のように、サブアイテムを持たないアイテムに対して 0 を取得するよりも、左外部結合を使用する必要があります。

SELECT items.itemid,
       Count(subitems.subitemid) AS count
FROM   items
       LEFT JOIN subitems
              ON ( subitems.itemid = items.itemid )
GROUP  BY items.itemid

パフォーマンスを向上させたい場合は、次のクエリを試すことができます。

SELECT itemid,
       Count(*) AS count
FROM   subitems
GROUP  BY itemid

ただし、これを使用すると、サブアイテムを持たないアイテムに関する情報は得られません (単にサブアイテム テーブル内に存在しません)。

于 2012-09-19T12:43:59.477 に答える
1
select items.itemID, count(*) as count 
  from items
  left join subItems on (items.itemID=subItems.itemID) 
group by itemID
于 2012-09-19T12:42:09.177 に答える