HAVING
使用できますし、使用する必要があります。SQLite 2.8.17 & 3.6.22 でテストしました。
2 つの評価の映画を取得するには:
SELECT mid
FROM movie
GROUP BY mid
HAVING COUNT(*) = 2;
その後、次のように使用できますIN
。
SELECT *
FROM movie
WHERE mid in (
SELECT mid
FROM movie
GROUP BY mid
HAVING COUNT(*) = 2
);
または元に戻す:
SELECT movie.*
FROM movie
JOIN (
SELECT mid
FROM movie
GROUP BY mid
HAVING COUNT(*) = 2
) those_with_two
ON movie.mid = those_with_two.mid;
参照用の完全なテスト ケースのセットアップ:
$ sqlite3 so-movie
create table movie (
mid varchar(10),
rating varchar(10)
);
insert into movie values('M1','R1');
insert into movie values('M1','R2');
insert into movie values('M2','R3');
insert into movie values('M3','R4');
いくつかHAVING
の理由で使用する必要があります。
- 複数の句が必要な場合はより柔軟です。たとえば、2 つの評価がある映画や mid='M3' の場合です。
- Lamakの2番目のソリューションよりも優れたパフォーマンスを発揮します(説明計画は、3つのテーブルにヒットすることを示しています)
- 読みやすく理解しやすい