SQL Query查找两个相关表之间缺少的行

时间:2010-09-30 00:41:48

标签: sql database oracle

我有两张桌子:

表A

  • ID
  • ABC_ID
  • VAL

表B

  • ID
  • ABC_ID
  • VAL

这两个表通过ABC_ID列直接相互关联。

我想找到表A中的所有VAL列值,表格B中的表示相同的ABC_ID。

2 个答案:

答案 0 :(得分:44)

SELECT A.ABC_ID, A.VAL WHERE NOT EXISTS 
   (SELECT * FROM B WHERE B.ABC_ID = A.ABC_ID AND B.VAL = A.VAL)

SELECT A.ABC_ID, A.VAL WHERE VAL NOT IN 
    (SELECT VAL FROM B WHERE B.ABC_ID = A.ABC_ID)

SELECT A.ABC_ID, A.VAL LEFT OUTER JOIN B 
    ON A.ABC_ID = B.ABC_ID AND A.VAL = B.VAL WHERE B.VAL IS NULL

请注意,这些查询根本不要求ABC_ID在表B中。我认为那就是你想要的。

答案 1 :(得分:-1)

DECLARE @start_date DATETIME='04-01-2021'; DECLARE @End_date DATETIME='04-30-2021'; 声明@min int 声明@max int 选择@min =min(test_uid), @max =max(test_uid) 从测试 其中日期 >= @START_DATE AND DATE < DATEADD(DAY, 1, @END_DATE)

select test_UID+1 as FirstMissingId, nextid - 1 as LastMissingId into #tmp from (select test.*,lead(test_UID) over (order by test_UID) as nextid from test @min 和 @max 之间的 test_UID ) test where nextid <> test_UID+1 创建表#tmp1(ID INT) 去
声明@lastmissingid BIGINT , @firstmissingid BIGINT 声明 recscan 游标 从 #tmp 中选择 firstmissingid ,lastmissingid 打开重新扫描 从 recscan 获取 next 到 @firstmissingid ,@lastmissingid 而@@FETCH_STATUS = 0 开始 声明@maxcnt int = @lastmissingid
声明@mincnt, int =@firstmissingid

同时@Counter <= @maxcnt
开始插入 #tmp1 值(@Counter) 设置 @Counter += 1 结尾 从 recscan 获取 next 到 @firstmissingid ,@lastmissingid 结尾 关闭重新扫描 取消分配recscan