2012-02-29 10 views
0

java/oracleを使用しています。私は以下の問題があります。上記のすべての条件の下でSQLクエリを書く方法?

SELECT 
     DISTINCT id_one, 
     status 
    FROM 
     sometable 
    WHERE 
     id_two IN (
      SELECT 
       DISTINCT id_two 
      FROM 
       othertable 
     ) 
     AND id_one IN (1946,1948,1949) 

私は1つのテーブルからデータをフェッチする上記のクエリを持っています。内部クエリのデータを他のテーブルから取得します。 今私は条件を内部のクエリに追加する必要があります。 othertableにはnameという名前のフィールドがもう1つあります。

これらは私が言及したIDです:1946,1948,1949。ここでそれぞれのIDは以下のような名前を持ちます:name1、name2、name3 name1、name2、name3はjavaアプリケーションから渡されます。

最後に、次のように必要なクエリ。私の質問

SELECT 
     DISTINCT id_one, 
     status 
    FROM 
     sometable 
    WHERE 
     id_two IN (
      SELECT 
       DISTINCT id_two 
      FROM 
       othertable other where other.name in('name1','name2','name3') 
     ) 
     AND id_one IN (1946,1948,1949) 

は次のとおりです。1946年のid NAME1ためを考慮すべきと1948のID name2の * を考慮すべきと1949のID NAME3のための基準として考慮されるべきです。 *私はすべてのIDの3つの名前すべてを考慮すべきではないことを意味します。

どのように達成できますか?ドキュメントから

答えて

0

これは、次の方法でも同様に行うことができます。

select distinct s.id_one, s.status 
    from sometable s join othertable o on (s.id_two = o.id_two) 
where (s.id_one = 1946 and o.name = 'name1') 
    OR (s.id_one = 1948 and o.name = 'name2') 
    OR (s.id_one = 1949 and o.name = 'name3'); 
+0

申し訳ありませんが、私は私の質問を編集しました。 name1、name2、およびname3は、othertableのname列に対して起動される値ではない列ではありません。 – user1016403

+0

多くの変更はありませんでしたが、自分の回答を編集しました。 –

+0

こんにちはアンドリュー、お返事ありがとうございます。私は疑問を持っています。私の質問で私はIN(1946,1948,1949)を配置しました。ここでidの数は動的ですが、私はそこに3つのIDがありますが、いくつかの時間は10になることができます...その場合、どのように処理できますか?動的な性質の場合にid_two inが不可能なsometableからの状態を選択する(1946)。助けてください。 – user1016403

0

http://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm

SELECT DISTINCT id_one, status 
FROM sometable 
WHERE 
id_two IN ( 
    SELECT DISTINCT id_two 
    FROM othertable other 
    where (other.name, id_one) in (
     select 'name1',1946 from dual union all 
     select 'name2',1948 from dual union all 
     select 'name3',1949 from dual) 
) 
+0

申し訳ありませんが、私は私の質問を編集しました。 name1、name2、およびname3は、othertableのname列に対して起動される値ではない列ではありません。回答で固定された – user1016403

+0

。 – danihp

関連する問題