Sql 在列表中查找值,但不在表中查找
我有一个由100个逗号分隔的数字组成的列表,我需要找出哪些数字在列表中,而不是在从一些表格中选择一些值。。。。2个选择之间的负号之类的东西。。。。有没有直接的方法可以做到这一点。Sql 在列表中查找值,但不在表中查找,sql,oracle,Sql,Oracle,我有一个由100个逗号分隔的数字组成的列表,我需要找出哪些数字在列表中,而不是在从一些表格中选择一些值。。。。2个选择之间的负号之类的东西。。。。有没有直接的方法可以做到这一点。 我使用的是oracle 12g您可以将字符串拆分为一个集合: Oracle安装程序: 问题2: 或者,您可以使用正则表达式: SELECT TO_NUMBER( REGEXP_SUBSTR( '1,2,3,5,8,13,21', '\d+', 1, LEVEL ) ) FROM DUAL CONNECT BY LE
我使用的是oracle 12g您可以将字符串拆分为一个集合: Oracle安装程序: 问题2: 或者,您可以使用正则表达式:
SELECT TO_NUMBER( REGEXP_SUBSTR( '1,2,3,5,8,13,21', '\d+', 1, LEVEL ) )
FROM DUAL
CONNECT BY LEVEL <= REGEXP_COUNT( '1,2,3,5,8,13,21', '\d+' )
MINUS
SELECT id FROM your_table
您可以将字符串拆分为一个集合: Oracle安装程序: 问题2: 或者,您可以使用正则表达式:
SELECT TO_NUMBER( REGEXP_SUBSTR( '1,2,3,5,8,13,21', '\d+', 1, LEVEL ) )
FROM DUAL
CONNECT BY LEVEL <= REGEXP_COUNT( '1,2,3,5,8,13,21', '\d+' )
MINUS
SELECT id FROM your_table
可以使用XMLTable将数字的字符串列表转换为
select to_number(x.column_value) from xmltable('1,3,5,7,9') x
where not exists (
select some_value from some_table where some_value = to_number(x.column_value)
);
或者,如果某个_值没有索引,则减号可能更有效:
select to_number(column_value) from xmltable('1,3,5,7,9')
minus
select some_value from some_table;
字符串列表作为一个或更具体地说是一个XQuery序列处理:
逗号构造函数创建序列。序列操纵功能(如并集和交集)也可用。所有XQuery序列实际上都是平坦的:嵌套序列被视为其平坦等价物。因此,例如,1、2、3、4、5、6、7被视为1、2、3、4、5、6、7。单例序列(如42)在大多数XQuery上下文中的作用与其单项42相同。请记住,任何XQuery表达式的结果都是一个序列
快速演示:
with some_table(some_value) as (
select 1 from dual
union all select 7 from dual
)
select to_number(x.column_value) from xmltable('1,3,5,7,9') x
where not exists (
select some_value from some_table where some_value = to_number(x.column_value)
);
TO_NUMBER(X.COLUMN_VALUE)
---------------------------------------
5
3
9
可以使用XMLTable将数字的字符串列表转换为
select to_number(x.column_value) from xmltable('1,3,5,7,9') x
where not exists (
select some_value from some_table where some_value = to_number(x.column_value)
);
或者,如果某个_值没有索引,则减号可能更有效:
select to_number(column_value) from xmltable('1,3,5,7,9')
minus
select some_value from some_table;
字符串列表作为一个或更具体地说是一个XQuery序列处理:
逗号构造函数创建序列。序列操纵功能(如并集和交集)也可用。所有XQuery序列实际上都是平坦的:嵌套序列被视为其平坦等价物。因此,例如,1、2、3、4、5、6、7被视为1、2、3、4、5、6、7。单例序列(如42)在大多数XQuery上下文中的作用与其单项42相同。请记住,任何XQuery表达式的结果都是一个序列
快速演示:
with some_table(some_value) as (
select 1 from dual
union all select 7 from dual
)
select to_number(x.column_value) from xmltable('1,3,5,7,9') x
where not exists (
select some_value from some_table where some_value = to_number(x.column_value)
);
TO_NUMBER(X.COLUMN_VALUE)
---------------------------------------
5
3
9