我觉得我是一个不错的SQL程序员;然而,我遇到的情况似乎无法找到一个优雅的解决方案。我的数据库中有两个表,一个是tmp_media表,另一个是tbInventoryMedia表。我想从tmpInmediaory中删除tmpInmedia表中不存在的所有媒体。但是,有一个名为VIN的独特列 - 某些VIN可以与其他VIN具有相同的媒体。
示例:
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_media表中的VIN才能删除任何数据。
如果需要进一步澄清,请告诉我 - 我认为这非常令人困惑。
答案 0 :(得分:4)
这应该说明我对你的要求的看法:
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
被删除