我有两张桌子:
这两个表通过ABC_ID
列直接相互关联。
我想找到表A中的所有VAL
列值,表格B中的不表示相同的ABC_ID。
答案 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