我有一个csv值列表,如('one','two','three','four'),这些值也存在于列的数据库中。
现在我想知道csv列表中的所有值,这些值在数据库中不存在。
例如,如果我的数据库列的值为'one','three','five','six','seven'。
然后我的结果应该返回值'two'和'four',因为它们存在于我的列表中但在数据库中不存在。
听起来很简单,但我被卡住了。
Here是带有示例的sql小提琴链接。
不想使用sqlfiddle(无论出于何种原因)的人的代码:
create table testcsv(
csvnumber varchar2(100)
);
INSERT ALL
INTO testcsv VALUES ('one')
INTO testcsv VALUES ('three')
INTO testcsv VALUES ('five')
INTO testcsv VALUES ('six')
INTO testcsv VALUES ('seven')
SELECT * FROM dual;
select csvnumber from testcsv where csvnumber IN('one', 'two','three', 'four');
P.S:实际情况显然非常复杂,我已将其简化以获得想法。
答案 0 :(得分:0)
我找到了解决方法。
该解决方案可在sqlfiddle here
上找到查询:
(select substr(csv,
instr(csv,',',1,lev) + 1,
instr(csv,',',1,lev+1 )-instr(csv,',',1,lev)-1)
from
(select ','||'one,two,three,four'||',' csv from dual),
(select level lev from dual connect by level <= 100)
where lev <= length(csv)-length(replace(csv,','))-1)
MINUS
select csvnumber from testcsv where csvnumber IN('one', 'two','three', 'four');
也许不是最好的解决方案,但现在对我有用。