一尘不染

SQL排除查询

sql

是否可以在单个SQL语句中执行以下操作:

例如,在提示中使用电话号码的子集8001231000-8001239999。然后查询其中包含电话号码的数据库,并返回原始子集中哪些电话号码不在我的数据库中?我的数据库是Oracle
10g。

基本上8001231000-8001239999,我不想知道哪个电话号码8001231000-8001239999不在数据库中,而是要取回它们之间的电话号码。


阅读 157

收藏
2021-03-08

共1个答案

一尘不染

假设电话号码是NUMBER,则可以生成特定范围内的所有电话号码的列表

 SELECT level - 1 + 8001231000
   FROM dual
CONNECT BY level <= 8001239999-8001231000+1

然后,您可以将该范围内所有电话号码的列表加入到您的实际电话号码表中。就像是

WITH all_numbers AS (
  SELECT level - 1 + 8001231000 phone_number
    FROM dual
 CONNECT BY level <= 8001239999-8001231000+1
)
SELECT *
  FROM all_numbers a
 WHERE NOT EXISTS(
    SELECT 1
      FROM phone_numbers p
     WHERE a.phone_number = p.phone_number)
2021-03-08