プログラム「バスケットボール」と「フットボール」の両方の行を持つテーブルからすべての ID を選択したい
次のようなテーブルがあるとします。
Id program
1 basketball
2 football
3 basketball
2 basketball
1 football
4 football
5 basketball
次のような結果を得るにはどうすればよいですか。
id
1
2
プログラム「バスケットボール」と「フットボール」の両方の行を持つテーブルからすべての ID を選択したい
次のようなテーブルがあるとします。
Id program
1 basketball
2 football
3 basketball
2 basketball
1 football
4 football
5 basketball
次のような結果を得るにはどうすればよいですか。
id
1
2
id
との両方の値を持つfootball
を返したいのでbasketball
、次を使用して結果を取得できます。
select id
from yt
where program in ('basketball', 'football')
group by id
having count(distinct program) = 2;
SQL Fiddle with Demoを参照してください。
テーブルに複数回参加することでも実行できます。
select t1.id
from yt t1
inner join yt t2
on t1.id = t2.id
where t1.program = 'basketball'
and t2.program = 'football';
デモで SQL Fiddle を参照してください
IN
またはOR
構文でこれを行うことができます。
SELECT id
FROM table
WHERE program = 'basketball'
OR program = 'football';
最初の 2 つの結果のみを取得する場合は、最後に追加LIMIT 2
します。
ところで、主キーのないテーブルを持つことは本当に悪い習慣です。このテーブルにインデックスを付ける方法がないため、パフォーマンスが非常に悪くなります。