!!! HAVINGを使用してこの問題を解決する方法はありますが、HAVINGを使用せずにそれを行う他の簡単な方法はありますか?
2つの関係aとbを持つテーブルt1があるとしましょう。
-a b
-1 2
-2 1
-3 4
-4 9
-8 5
-5 2
-6 5
繰り返されている列Bのケース(この場合は2と5)のみを印刷するにはどうすればよいですか?
!!! HAVINGを使用してこの問題を解決する方法はありますが、HAVINGを使用せずにそれを行う他の簡単な方法はありますか?
2つの関係aとbを持つテーブルt1があるとしましょう。
-a b
-1 2
-2 1
-3 4
-4 9
-8 5
-5 2
-6 5
繰り返されている列Bのケース(この場合は2と5)のみを印刷するにはどうすればよいですか?
句が必要ない場合はHAVING
、サブクエリを使用できます。
select t1.a, t1.b
from yourtable t1
inner join
(
select count(*) tot, b
from yourtable
group by b
) t2
on t1.b = t2.b
where t2.tot > 1
SQL FiddlewithDemoを参照してください。
サブクエリは、各値のカウントを取得するために使用されb
ます。次に、結果をテーブルに結合し、カウントが1より大きいレコードを除外します。
これにより、次の結果が得られます。
| A | B |
---------
| 1 | 2 |
| 8 | 5 |
| 5 | 2 |
| 6 | 5 |
すでに素晴らしい例に加えて... HAVING の例:
SELECT * FROM
(
SELECT col_a t1
FROM stack_test
) a,
(
SELECT col_b t2
FROM stack_test
GROUP BY col_b
HAVING Count(*) > 1
) b
WHERE t1 = t2
/
SQL>
T1 T2
-------
2 2
5 5