Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询-需要优雅的解决方案_Sql_Sql Server - Fatal编程技术网

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

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

我觉得我是一个像样的SQL程序员;然而,我遇到了一个情况,我似乎无法找到一个优雅的解决方案。我的数据库中有两个表,一个tmp_媒体表和一个tbInventoryMedia表。我想从tbInventoryMedia中删除tmp_media表中不存在的所有介质。然而,有一个独特的列称为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_介质表中的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_媒体表中进行媒体处理。有时,更新后的汽车可能会删除图像,因此此过程将验证不再与汽车关联的图像是否已从数据库中删除。