SQL質疑応答スレ 9問目

このエントリーをはてなブックマークに追加
314NAME IS NULL
簡単そうな気がするのですが、どうしてもうまくいかないので、分かる方がいれば教えてください。

ユーザーが複数の資格を持っているというありがちなテーブル構成があるのですが、
「資格1または資格2を持っているユーザー」の検索はできるのですが、
「資格1と資格2」を両方持っているユーザー」の検索ができません。

データベースはpostgresです。

テーブル構成はこんな感じです。

ユーザーテーブル
[ユーザーID、名前]
001,山田
002,鈴木

資格テーブル
[ユーザーID、資格]
001,資格1
001,資格2
002,資格1

「資格1または資格2を持っているユーザー」であれば、

select distinct ユーザーテーブル.ユーザーID、名前 from ユーザーテーブル
inner join 資格テーブル on (ユーザーテーブル.ユーザーID = 資格テーブル.ユーザーID)
where 資格テーブル.資格 = '資格1'
or 資格テーブル.資格 = '資格2'

で取得できました。

「資格1と資格2」を両方持っているユーザーとして山田さんを検索したいのですが、
単純にorをandにすると、対象が0件になってしまいます。

とても困っているので、よろしくお願いします。