我有一个临时表#allocations 其中包含以下字段
DAllocationId DAllocationName FundCode DSplitTotal DDisabled DistAlloc AAllocationId AAllocationName ASplitTotal ADisabled
我有另一个表TRAN_POST_PTN,它还包含这些列以及其他列。 所以对于asplit id和dsplit id,我们只有相同的列名,即"发布号码"在TRAN_POST_PTN。
我需要做的是在我的分配表中插入来自TRAN_POST_PTN的所有行
posting_number is not in (select DAllocationId from #allocations)
and posting_number not in (select AAllocationId from #allocations)
我不想在这里使用Not。
有人可以建议我更好地编写此查询。 我尝试使用union编写它,但这不起作用。
答案 0 :(得分:10)
NOT IN
有几种替代方案。这是一个使用NOT EXISTS
:
SELECT fields
FROM TRAN_POST_PTN tpp
WHERE NOT EXISTS (
SELECT 1
FROM #allocations a
WHERE tpp.posting_number IN (a.DAllocationId, a.AAllocationId))
另一种常见的方法是使用LEFT JOIN
进行NULL
次检查,但我相信您会看到使用NOT EXISTS
获得更好的效果。
SELECT fields
FROM TRAN_POST_PTN tpp
LEFT JOIN #allocations a ON tpp.posting_number = a.DAllocationId
OR tpp.posting_number = a.AAllocationId
WHERE a.DAllocationId IS NULL