【发布时间】: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,但不在表定义中。然后你用你还没有解释什么的表显示一个查询。你应该提供一个样本数据,包括working和not working这两种情况以及你想要的结果。
标签: sql sql-server join