我正在使用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的字段。
这些是我提到的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 :(得分:0)
来自doc: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 )
)
答案 1 :(得分: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');