2

次のテーブルから選択する SQL クエリを実行したいと思います。

id    type    num
1     a       3
1     b       4
2     a       5
2     c       6

それらが同じ 'id' を持ち、タイプが 'a または b' である場合、結果は次のようになります。

id    type    num
1     a       3
1     b       4

それをどのように達成できるか、誰にも分かりますか?

4

2 に答える 2

1
SELECT table1.* 
FROM table1,
(
  SELECT COUNT(*) as cnt, id
  FROM (
    SELECT * 
    FROM table1
    WHERE type = 'a' OR type = 'b'
  ) sub1
  GROUP BY id
  HAVING cnt > 1
)sub2
WHERE table1.id = sub2.id

ここでテスト: http://sqlfiddle.com/#!2/4a031/1は正常に動作するようです。

于 2012-08-22T19:39:55.903 に答える
0

方法 1:

select a.*
from some_table t
join some_table a on a.id = t.id and a.type = 'a'
join some_table b on b.id = t.id and b.type = 'b'

方法 2:

select *
from some_table t
where exists ( select *
               from some_table x
               where x.id   = t.id
                 and x.type = 'a'
             )
  and exists ( select *
               from some_table x
               where x.id   = t.id
                 and x.type = 'b'
             )

最初の手法では、id と type のカーディナリティに応じて、結果セットで行が重複する可能性があります。後者は、テーブルの適切なサブセットを提供することが保証されています。

どちらのクエリでも、テーブルに適切なインデックスが定義されていると仮定すると、かなり同等のパフォーマンスが得られるはずです。

于 2012-08-22T19:53:33.080 に答える