在SQL Query中获取两个数组的XOR

时间:2011-11-28 05:58:41

标签: sql oracle

我有一个场景,我需要将CSV格式字符串中的'name id'作为绑定参数传递给SQL查询,并检查表中是否存在任何id。它是一种id的数组的XOR,表名中的表名为id。

我无法得到如何做到这一点(数组到列比较)。你能指点我这个方向吗?

我无法使用Java或PL / Sql,因为我的查询将由另一个在运行时进行处理的团队使用。

2 个答案:

答案 0 :(得分:2)

如果绑定多个值,而不是单个字符串, 你可以用你的csv值制作一个表格:

select column_value as id 
from table(sys.dbms_debug_vc2coll('linia 1','linia 2','linia 3'))

并使用这样的语句来制作xor

select a.id,b.id 
from 
  table a
  full outer join
    (query)b
  on a.id=b.id

希望这会对你有所帮助。

更新:我发现here查询以csv格式的值制作表格:

with query2 as (
    select substr(:mylist,
                  instr(','||:mylist||',', ',', 1, rn),
                  instr(','||:mylist||',', ',', 1, rn+1)
                  - instr(','||:mylist||',', ',', 1, rn) - 1) value
    from (select rownum rn from dual 
         connect by level 
                       <= length(:mylist)-length(replace(:mylist,',',''))+1)
    )
  select value
  from query2

答案 1 :(得分:0)

oracle 10g及更高版本中的

您可以使用以下命令将单个csv参数(mycsv)转换为列:

SELECT REGEXP_SUBSTR(mycsv,'[^,]+',1,LEVEL) element                           
FROM dual                       
CONNECT BY LEVEL < LENGTH(REGEXP_REPLACE(mycsv,'[^,]+')) + 1

然后使用IN子句和上面的子查询

SELECT * FROM t1 
WHERE id IN ( ....the query above... )