Oracle SQL 在 select 和简单集合之间相交
Oracle SQL intersect between select and simple collection
我想写一个这样的 SQL 脚本:
select count(*) from table1 t1 where exists (
select t2.desired_col from table2 t2 where t1.ID = t2.reference_t1_id
intersect
(2, 5, 9, 10)
);
目标是告诉我,t1
中有多少条目在 t2
的 desired_col
和给定集合(即 (2, 5, 9, 10)
之间至少有一个共同值). t2
与 t1
具有多对一关系。但是,似乎我无法在 select
和简单集合之间相交。作为一种解决方法,我像这样包装了给定的集合:
select count(*) from table1 t1 where exists (
select t2.desired_col from table2 t2 where t1.ID = t2.reference_t1_id
intersect
select desired_col from table t2 where desired_col in (2, 5, 9, 10)
);
我认为这个解决方案看起来有点难看,想知道是否有更好的方法来找到 select
语句和简单集合之间的交集。
您需要将您的 ID 列表变成一个实际的集合,然后您可以在 SQL 中使用 table()
函数。像这样:
select count(*) from table1 t1
where exists (
select t2.desired_col from table2 t2
where t1.ID = t2.reference_t1_id
intersect
select * from table(sys.odcinumberlist (2, 5, 9, 10))
);
有几种不同的解决方案。例如,您可以使用 IN 子查询扩展 WHERE 子句,而不是交集:
and t2.desired_col in (select * from table(sys.odcinumberlist (2, 5, 9, 10)))
或者确实
and t2.desired_col in (2, 5, 9, 10)
这使用 Oracle 提供的集合类型 sys.odcinumberlist
,它是一个数字数组。
我想写一个这样的 SQL 脚本:
select count(*) from table1 t1 where exists (
select t2.desired_col from table2 t2 where t1.ID = t2.reference_t1_id
intersect
(2, 5, 9, 10)
);
目标是告诉我,t1
中有多少条目在 t2
的 desired_col
和给定集合(即 (2, 5, 9, 10)
之间至少有一个共同值). t2
与 t1
具有多对一关系。但是,似乎我无法在 select
和简单集合之间相交。作为一种解决方法,我像这样包装了给定的集合:
select count(*) from table1 t1 where exists (
select t2.desired_col from table2 t2 where t1.ID = t2.reference_t1_id
intersect
select desired_col from table t2 where desired_col in (2, 5, 9, 10)
);
我认为这个解决方案看起来有点难看,想知道是否有更好的方法来找到 select
语句和简单集合之间的交集。
您需要将您的 ID 列表变成一个实际的集合,然后您可以在 SQL 中使用 table()
函数。像这样:
select count(*) from table1 t1
where exists (
select t2.desired_col from table2 t2
where t1.ID = t2.reference_t1_id
intersect
select * from table(sys.odcinumberlist (2, 5, 9, 10))
);
有几种不同的解决方案。例如,您可以使用 IN 子查询扩展 WHERE 子句,而不是交集:
and t2.desired_col in (select * from table(sys.odcinumberlist (2, 5, 9, 10)))
或者确实
and t2.desired_col in (2, 5, 9, 10)
这使用 Oracle 提供的集合类型 sys.odcinumberlist
,它是一个数字数组。