我有以下记录
Table1
id | 123 456 345 789
Table2
name| 123.abc 345.jkl
现在我想只显示id,即(456,789
同样)
请帮助
答案 0 :(得分:1)
您可以使用MINUS
。如果id
为VARCHAR2
字段,则不需要{id}上的TO_CHAR
。 SUBSTR
,INSTR
用于在第一个“。”之前提取字符。
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