Sql 比较Oracle中的两个列表
我有两个列表需要比较。我需要找出列表A中是否至少有一个元素在列表B中找到。我知道在中不能处理两个列表。我的其他选择是什么 基本上是这样的:Sql 比较Oracle中的两个列表,sql,oracle,Sql,Oracle,我有两个列表需要比较。我需要找出列表A中是否至少有一个元素在列表B中找到。我知道在中不能处理两个列表。我的其他选择是什么 基本上是这样的: SELECT CASE WHEN ('A','B','C') IN ('A','Z','H') THEN 1 ELSE 0 END "FOUND" FROM DUAL 非常感谢您的帮助 您需要重复以下条件: SELECT (CASE WHEN 'A' IN ('A', 'Z', 'H') OR 'B' IN ('A',
SELECT
CASE WHEN ('A','B','C') IN ('A','Z','H') THEN 1 ELSE 0 END "FOUND"
FROM DUAL
非常感谢您的帮助 您需要重复以下条件:
SELECT (CASE WHEN 'A' IN ('A', 'Z', 'H') OR
'B' IN ('A', 'Z', 'H') OR
'C' IN ('A', 'Z', 'H')
THEN 1 ELSE 0
END) as "FOUND"
FROM DUAL
您需要重复以下条件:
SELECT (CASE WHEN 'A' IN ('A', 'Z', 'H') OR
'B' IN ('A', 'Z', 'H') OR
'C' IN ('A', 'Z', 'H')
THEN 1 ELSE 0
END) as "FOUND"
FROM DUAL
在Oracle中,您可以执行以下操作:
select
count(*) as total_matches
from table(sys.ODCIVarchar2List('A', 'B', 'C')) x,
table(sys.ODCIVarchar2List('A', 'Z', 'H')) y
where x.column_value = y.column_value;
在Oracle中,您可以执行以下操作:
select
count(*) as total_matches
from table(sys.ODCIVarchar2List('A', 'B', 'C')) x,
table(sys.ODCIVarchar2List('A', 'Z', 'H')) y
where x.column_value = y.column_value;
你可能正在寻找这样的东西。WITH子句只是用来模拟你的“列表”(不管你是什么意思);它们并不是解决方案的一部分。您需要的查询只是最后三行(加上末尾的分号)
你可能正在寻找这样的东西。WITH子句只是用来模拟你的“列表”(不管你是什么意思);它们并不是解决方案的一部分。您需要的查询只是最后三行(加上末尾的分号)
如果正在使用字符串集合,可以尝试使用多集运算符
create type coll_of_varchar2 is table of varchar2(4000);
以及:
此外:
-- union of elemtns
select * from table(coll_of_varchar2('A','B','C') multiset union distinct coll_of_varchar2('A','Z','H'));
select * from table(coll_of_varchar2('A','B','C') multiset union all coll_of_varchar2('A','Z','H'));
-- eelemnt from col1 not in col2
select * from table(coll_of_varchar2('A','A','B','C') multiset except all coll_of_varchar2('A','Z','H'));
select * from table(coll_of_varchar2('A','A','B','C') multiset except distinct coll_of_varchar2('A','Z','H'));
-- check if col1 is subset col2
select * from dual where coll_of_varchar2('B','A') submultiset coll_of_varchar2('A','Z','H','B');
如果正在使用字符串集合,可以尝试使用多集运算符
create type coll_of_varchar2 is table of varchar2(4000);
以及:
此外:
-- union of elemtns
select * from table(coll_of_varchar2('A','B','C') multiset union distinct coll_of_varchar2('A','Z','H'));
select * from table(coll_of_varchar2('A','B','C') multiset union all coll_of_varchar2('A','Z','H'));
-- eelemnt from col1 not in col2
select * from table(coll_of_varchar2('A','A','B','C') multiset except all coll_of_varchar2('A','Z','H'));
select * from table(coll_of_varchar2('A','A','B','C') multiset except distinct coll_of_varchar2('A','Z','H'));
-- check if col1 is subset col2
select * from dual where coll_of_varchar2('B','A') submultiset coll_of_varchar2('A','Z','H','B');
我试图做一些非常类似的事情,但第一个列表是使用listagg创建的同一查询上的另一个字段,包含整数,如:
LISTAGG(my_first_list,', ') WITHIN GROUP(
ORDER BY
my_id
) my_first_list
并将其与我已返回的所有其他字段一起返回
SELECT
CASE WHEN my_first_list IN ('1,2,3') THEN 1 ELSE 0 END "FOUND"
FROM DUAL
我试图做一些非常类似的事情,但第一个列表是使用listagg创建的同一查询上的另一个字段,包含整数,如:
LISTAGG(my_first_list,', ') WITHIN GROUP(
ORDER BY
my_id
) my_first_list
并将其与我已返回的所有其他字段一起返回
SELECT
CASE WHEN my_first_list IN ('1,2,3') THEN 1 ELSE 0 END "FOUND"
FROM DUAL
左边的不是列表,而是“元组”。Oracle中没有“列表”。PL/SQL集合(varray、嵌套表等)中的字符串“A”、“B”、“C”在哪里?在标准关系表中?或者在Oracle中确实存在的其他数据库对象中?正如我所说,“列表”在Oracle中不是一种对象类型。左边的不是列表,而是一个“元组”。Oracle中没有“列表”。PL/SQL集合(varray、嵌套表等)中的字符串“A”、“B”、“C”在哪里?在标准关系表中?或者在Oracle中确实存在的其他数据库对象中?正如我所说,“列表”不是Oracle中的对象类型。