我有一个临时表#allocations,它有以下字段
DAllocationId DAllocationName FundCode DSplitTotal DDisabled DistAlloc AAllocationId AAllocationName ASplitTotal ADisabled
Run Code Online (Sandbox Code Playgroud)
我有另一个表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)
Run Code Online (Sandbox Code Playgroud)
我不想在这里使用Not.
有人可以建议我更好的方式来编写这个查询.我尝试使用union编写它,但这不起作用.
sge*_*des 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))
Run Code Online (Sandbox Code Playgroud)
另一种常见的方法是使用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
Run Code Online (Sandbox Code Playgroud)