想要显示表中不匹配的记录

时间:2017-10-23 22:15:38

标签: sql oracle oracle11g oracle10g

我有以下记录

Table1
id |  123 456 345 789

Table2
name| 123.abc 345.jkl 

现在我想只显示id,即(456,789同样)

请帮助

2 个答案:

答案 0 :(得分:1)

您可以使用MINUS。如果idVARCHAR2字段,则不需要{id}上的TO_CHARSUBSTRINSTR用于在第一个“。”之前提取字符。

SELECT TO_CHAR(id) ID
FROM   table1
MINUS
SELECT SUBSTR(NAME, 1, INSTR(NAME, '.') - 1) 
FROM   table2 ; 

答案 1 :(得分:0)

也许是这样的。 “匹配”在子查询中完成(在WHERE子句的NOT EXISTS条件中)。编写假设要求是“name”与“id”匹配,当“name”是“id”,后跟一个句点后跟至少一个以上的字符。如果句点不是强制性的,或者如果它是,但它可能是名称的最后一个字符,则可以轻松修改查询以满足该要求。

with
  table1 ( id ) as (
    select '123' from dual union all
    select '456' from dual union all
    select '345' from dual union all
    select '789' from dual
  ),
  table2 ( name ) as (
    select '123.abc' from dual union all
    select '345.jkl' from dual
  )
-- End of simulated inputs (for testing only, not part of the solution).
-- SQL query begins BELOW THIS LINE. Use your actual table and column names.
select id
from   table1 t1
where  not exists ( 
                    select name
                    from   table2
                    where  name like t1.id || '._%'
       )
;

 ID
---
456
789