SQL查询-需要优雅的解决方案
我觉得我是一个像样的SQL程序员;然而,我遇到了一个情况,我似乎无法找到一个优雅的解决方案。我的数据库中有两个表,一个tmp_媒体表和一个tbInventoryMedia表。我想从tbInventoryMedia中删除tmp_media表中不存在的所有介质。然而,有一个独特的列称为VIN-一些VIN可以与其他VIN具有相同的介质 例如:SQL查询-需要优雅的解决方案,sql,sql-server,Sql,Sql Server,我觉得我是一个像样的SQL程序员;然而,我遇到了一个情况,我似乎无法找到一个优雅的解决方案。我的数据库中有两个表,一个tmp_媒体表和一个tbInventoryMedia表。我想从tbInventoryMedia中删除tmp_media表中不存在的所有介质。然而,有一个独特的列称为VIN-一些VIN可以与其他VIN具有相同的介质 例如: tmp_media Vin MediaId X 20223 Y 54235 Z 20223 tbInventoryMedia vin Med
tmp_media
Vin MediaId
X 20223
Y 54235
Z 20223
tbInventoryMedia
vin MediaId
X 20223
X 32131
Y 54235
Z 20223
在上述示例中,X的vin将被删除,其中mediaId为34131
最后,tmp_media不包含所有VIN的详尽列表,仅包含最近处理过的VIN。因此,tbInventoryMedia中还有其他媒体需要单独使用。只有位于tmp_介质表中的VIN才能删除任何数据
如果需要进一步澄清,请让我知道-我认为这非常令人困惑。这应该说明我对您的要求的看法:
create table #tmp_media (VIN char(1), MediaID int)
create table #tbInventoryMedia (VIN char(1), MediaID int)
insert #tmp_media
select Vin = 'X', MediaId=20223
union select 'Y', 54235
union select 'Z', 20223
insert #tbInventoryMedia
select vin = 'X', MediaId = 20223
union select 'X', 32131
union select 'Y', 54235
union select 'Z', 20223
union select 'A', 20223
union select 'A', 12345
select * from #tbInventoryMedia
delete im
from
#tbInventoryMedia im
join (select distinct VIN from #tmp_media) as uq on uq.VIN = im.VIN
left join #tmp_media m on m.MediaID = im.MediaID and m.VIN = im.VIN
where m.MediaID is null
select * from #tbInventoryMedia
drop table #tmp_media
drop table #tbInventoryMedia
我已经为“A”VIN添加了一些数据,我认为应该不讨论这些数据。在本例中,只有
X,32131
被删除您声明:“tmp_介质不包含所有VIN的详尽列表,仅包含最近处理过的VIN。因此tbInventoryMedia中还有其他介质需要单独使用。”当tmp_介质表中缺少两种介质时,您如何区分应删除的介质和应单独保留的介质?如果介质的VIN不在tmp_介质中,则不应删除该介质。这个系统相当复杂,我们处理大量的汽车,一次只更新几辆。更新后,cars将被放入tmp_媒体表中进行媒体处理。有时,更新后的汽车可能会删除图像,因此此过程将验证不再与汽车关联的图像是否已从数据库中删除。