【问题标题】:SQL joins to avoid duplicates in two tablesSQL连接以避免两个表中的重复
【发布时间】:2015-12-06 05:21:14
【问题描述】:

我有两张桌子,一张用于图像,一张用于零件。零件有图像,但零件被复制,因此图像被复制。我想只下载一张图片以获得唯一的零件编号。

One PartNumber HAS many images (all the same at different locations)
One PartID HAS one image (unique imageid)
One ImageID HAS one partnumber

我总结了下表:

Part Table: PartNumber, ImageID

Image Table: ImageID, ImageName, ImageSaved (true or false - 1,0)

示例数据是:

零件:(P1,1), (P1, 2), (P1, 3), (P2, 4)
图片:(1, I1, 1), (2, I2, 0), (3, I3, 0), (4, I4, 0)

因此,P1 有图像 I1..3,但它们实际上是相同的图像,但存储在不同的位置。因此,一旦下载一次(imagesaved = 1),该部分的其他记录可能会被忽略。

我尝试了以下方法来提取所有图像,但我需要添加一些东西来阻止系统下载所有重复的图像(现在正在发生这种情况)。

select * from trahanimage ti1 inner join  
(
select top 10 ti.imageid, trp.manpartnumber, ti.imagename,  
ti.imageurl,       row_number() 
over(partition by trp.manpartnumber order by trp.manpartnumber) as rk
from trahanimage ti
inner join trahanretailerpart trp 
on trp.imageid = ti.imageid
and ti.imagetype = 2
and ti.imageSaved = 0
and trp.currentpart = 1
and trp.shopid = 10 ) as summary on summary.imageid = ti1.imageid
and summary.rk = 1

这是第一次工作,但在下载后,一个记录(例如 I1)的图像保存更改为 1,然后当下一批运行时,它需要忽略为已保存图像的部分连接的图像。我认为在summary.rk 之后需要一个新的加入。从逻辑上讲逻辑是

and summary.rk =1 and ti1.imageid not in (select imageid from
trahanimage where imagesaved = 1 and manpartnumber = part number in
inner join).

欢迎任何帮助。

【问题讨论】:

  • 架构不匹配。您应该提供sqlFiddle,以便我们更好地理解问题。您定义了PartID,但不在表定义中。然后你用你还没有解释什么的表显示一个查询。你应该提供一个样本数据,包括workingnot working这两种情况以及你想要的结果。

标签: sql sql-server join


【解决方案1】:

好的,我现在使用 EXISTS 解决了这个问题

where  not exists (select trp1.manpartnumber from trahanretailerpart trp1
 inner join trahanimage tix on tix.imageid = trp1.imageid and
tix.imagesaved = 1 and trp1.currentpart = 1 and tix.imagetype = 2 and
trp.shopid = 10)

【讨论】:

    【解决方案2】:

    这将返回尚未下载图像的部分。
    如果部分有任何saveimage 然后SUM will be <> 0

    SQL FIDDLE DEMO

     SELECT p.PartNumber, SUM(I.ImageSaved) Download, MIN(p.ImageID) DownloadID
     FROM Parts p 
     INNER JOIN Image I
     ON   p.ImageID = I.ImageID
     GROUP BY p.PartNumber
     HAVING SUM(I.ImageSaved) = 0
    

    【讨论】:

    • 我想知道这个答案是否解决了您的问题?因为我无法理解您的完整查询,所以我只处理您描述的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多