2010年12月29日水曜日

distinctってそんなに使うのか?

SQLのdistinctは使い所によっては、必要なキーワードだが、訳も分からず使われている事も多い。「膨らんだから書いとけ!」見たいな感じで。

若者のSQLを見ていると、同じ使い方が多いことに気づいた。例えば

foo: id, name
bar: id, foo_id, flag

というテーブル構成で、「barでflagがたっているfooの行を取得」が課題だった場合

select
  f.id, f.name
from
  foo f inner join bar b on b.foo_id = f.id
where
  b.flag = true

と書いてしまったが為に、最終的にselect句にdistinctをつけるはめに。。

これは「fooからデータを取得する際の抽出条件」と認識すれば

select
  f.id, f.name
from
  foo f
where
  exists (select 'x' from bar b where b.foo_id = f.id and b.flag = true)

と書けるはずで、distinct は不要だ。

selectは、縦*横の新しい表を取得する物で、「1行が意味する概念」は何かを、はっきり意識できていないからではと思う。

0 件のコメント:

コメントを投稿