重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

以下の項目を抽出するSQL文を色々考えているの
ですが、どうしても思い浮かびません。ぜひとも
ご教示いただきたく存じます。使用データベースは
PostgreSQL7.2です。

テーブル構成は以下のとおりです。

事業コード 部署コード 情報コード
01     02     01
01     02     02
01     02     03
02     05     01
02     05     02
02     05     05
02     07     02
02     07     03
02     07     06


以上のようなテーブルから、「情報コード02と03の
両方をもつ事業コードと部署コードの組み合わせ」を
求めるSQLを記述したいのです。この結果は

事業コード 部署コード
01     02
02     07

となります。

以上のような説明でご理解いただけますでしょうか。
足りない情報などがありましたらご指摘ください
ませ。

宜しくお願いいたします。

A 回答 (2件)

事業コード, 部署コード, 情報コードでユニークとなるのであれば、



select 事業コード, 部署コード
from TBL1
where 情報コード in ('02', '03')
group by 事業コード, 部署コード
having count(*) = 2

ユニークにならないのであれば、

select 事業コード, 部署コード
from (
select distinct 事業コード, 部署コード, 情報コード from TBL1
) as WK
where 情報コード in ('02', '03')
group by 事業コード, 部署コード
having count(*) = 2

こんな感じかなぁ。
ちなみにPostgreSQLを動かす環境がないので、動作するかは不明です(^^;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。事業コード, 部署コード, 情報コードでユニークですので最初にご提示いただいたSQLを試したらうまくいきました。ありがとうございました。havingを使うのですね。参考になりました。

お礼日時:2005/03/31 10:33

こんなのはどうでしょうか。



select tmp1.a tmp1.b from
(select 事業コード as a, 部署コード as b from xxxtable where 情報コード='02') as tmp1,
(select 事業コード as a, 部署コード as b from xxxtable where 情報コード='03') as tmp2
where tmp1.a=tmp2.a and tmp1.b=tmp2.b;

パフォーマンスは無視してます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。もっと複雑なクエリーになると思いましたが、意外に簡単なものですね。パフォーマンスの問題はハードウェアでカバーできると思うので、なによりもわかりやすさ重視です。その点でとても参考になりました。ありがとうございました。

お礼日時:2005/03/31 10:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す