SQL查询 - 需要优雅的解决方案
问题描述:
我觉得自己是一位体面的SQL程序员;然而,我遇到了一个我似乎无法找到一个优雅的解决方案来解决的情况。我的数据库中有两个表,一个tmp_media表和一个tbInventoryMedia表。我想从tbInventoryMedia中删除tmp_media表中不存在的所有媒体。但是,有一个明显的列VIN--一些VIN可以具有与其他媒体相同的媒体。SQL查询 - 需要优雅的解决方案
实施例:
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的穷举列表,只有那些最近已经处理完毕。因此,tbInventoryMedia将会有其他媒体需要独立。只有位于tmp_media表中的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,这是我应该beleive被单独留在家中。在这个例子中,只有X, 32131
被删除
+0
感谢您的回复! –
您声明:“tmp_media没有包含所有VIN的详尽列表,只包含那些最近已经处理过的列表,因此tbInventoryMedia中还有其他媒体需要单独保留。如何区分应该删除的媒体与当tmp_media表中缺少媒体时应该保留的媒体? –
如果媒体的VIN不在tmp_media中,则不应删除。该系统相当复杂,我们处理大量汽车,只有一对夫妇一次更新。当他们更新时,汽车被放入tmp_media表中进行媒体处理。有时更新的汽车可能会删除图像,因此此过程将验证不再与汽车绑定的图像将从数据库中删除。 –