Как написать ниже SQL-запрос со всеми упомянутыми условиями? - PullRequest
0 голосов
/ 29 февраля 2012

Я использую Java / Oracle. У меня есть вопрос ниже.

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

У меня есть запрос выше для извлечения данных из одной таблицы. данные внутреннего запроса из другой таблицы. Теперь мне нужно добавить один, где условие для внутреннего запроса. othertable имеет еще одно поле с именем name.

это идентификаторы, которые я упомянул: 1946, 1948, 1949. здесь каждый идентификатор будет иметь имена, как показано ниже: 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 года идентификатор id1 следует рассмотреть, а для 1948 года идентификатор name2 следует рассмотреть * и для 1949 года идентификатор id3 должен рассматриваться как критерий. * я имею в виду, что запрос не должен учитывать все 3 имени для каждого идентификатора.

как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Это также можно сделать следующим образом:

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 голосов
/ 29 февраля 2012

Из документа: 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 )
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...