|
2013/10/25(Fri) 11:35:31 編集(投稿者)
■No68514 (くま さん) に返信 >>> と指定しています。 >>> すると、下の結果が出ます。 >> まずこの文だと不完全なのでエラーになると思います。
FROM 句に テーブル2 が無いのに、WHERE 句で テーブル2 が記載されていますので、 「下の結果が出ます」という状況を、こちらで再現させることができません。
現象を再現可能な SQL を、もう一度投稿しなおして頂けないでしょうか。
SQL に対して「どこが間違っているのか」を指摘するのであれば、まずは 現象を再現できない SQL を見てみないことには、先に進みにくいので…。
> AND テーブル2.cd3 = エー > AND テーブル2.cd3 = ビー > AND テーブル2.cd3 = シー 文字列比較でしょうから、「= エー」ではなく「= 'エー'」ですよね。
また、上記で使う論理演算子は、AND では無く OR ではないでしょうか。 AND と OR を間違えただけであれば、文法エラーとはなりませんが、 これらを AND 条件で繋いでしまっては、結果が 0 件になってしまいます。
もし、「エー, ビー, シー の 3 レコードが存在している」ことが 条件なのであれば、 No68515 の PANG2 さんの回答のように、 複数回の存在確認を行うとか、集計するなどの対応が必要です。
SELECT テーブル1.cd, テーブル1.name, テーブル1.cd2 FROM テーブル1 WHERE EXISTS(SELECT cd2 FROM テーブル2 WHERE テーブル1.cd2 = テーブル2.cd2 AND cd3 IN ('エー', 'ビー', 'シー') GROUP BY cd2 HAVING 111 = SUM(DISTINCT CASE cd3 WHEN 'エー' THEN 100 WHEN 'ビー' THEN 10 WHEN 'シー' THEN 1 END ))
>>テーブル1とテーブル2をcd2で連結して(inner join ) >>テーブル2.cd3 in ('エー','ビー','シー')をWhere句に指定するとよいです。 > > この部分をSQL文にすると、どうなるのでしょうか。
まずは、回答にあった「INNER JOIN」というキーワードについて 調べてみてください。複数テーブルを結合する際に使われる一般的な 構文なので、使用例もすぐに見つかるかと思います。
なお、SQL 文は、データベースによって『方言』があります。
今回のように実行環境が明かされていない状況では、具体的な SQL を 回答するのは難しいので、概要のみの回答になりがちです。
たとえば shu さんの回答にあった JOIN 構文ですが、これは Oracle 8i 以下では利用できません(Oracle 9i 以降でのサポート)。 また、私の回答に書いた SQL も、たとえば SQL Server 2008 では使えますが、 Access 2003 では使えません。
次回からは、実行環境も明記されることをおすすめします。
|