SQL查询 - 需要优雅的解决方案

时间:2011-11-01 13:29:53

标签: sql sql-server

我觉得我是一个不错的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才能删除任何数据。

如果需要进一步澄清,请告诉我 - 我认为这非常令人困惑。

1 个答案:

答案 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被删除