Sql 在列表中查找值,但不在表中查找

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

我有一个由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 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