複雑なSQL3 サブクエリ

前提

カテゴリは上位のカテゴリとサブカテゴリが存在する。例えば、カテゴリには国語、数学、社会、理科、英語があり、理科カテゴリのサブカテゴリとして物理、化学、地学、生物があるような。カテゴリは2段階までで、サブサブカテゴリは存在しないとする。

categoryテーブル

以下のようなカラムを持つ。category_idとparent_category_idが等しい場合、それは上位のカテゴリである。

  • category_id (int)(PK)
  • category_name (text)
  • parent_category_id (int)

取得したいデータ

以上の条件で、あるカテゴリ(ここではカテゴリID20)と同じペアレントIDを持つカテゴリをすべて取得する。

例:

カテゴリIDカテゴリ名
20物理
21化学
22地学
23生物

SQL

SQLは以下の通り。

select category_id, category_name 
from category 
where 
  parent_category_id = 
  (select parent_category_id from category 
   where category_id = 20);
order by category_id

DBIC

DBICのコードは以下の通り。

my $subq = sprintf " = (select parent_category_id from category where category_id = %d)",
           20;
$c_rs = $c_rs->search({
    parent_category_id =>  ?$subq 
});
$c_rs = $c_rs->search_literal(
    'category_id <> parent_category_id',
    {order_by => 'category_id'});

ポイント

  • サブクエリ部分は別に変数に代入し、リファレンスを渡す。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2011-06-16 (木) 11:39:58 (2653d)