很抱歉,如果标题不像它应该的那样具有描述性,但很难用一句话解释我想要做什么;)。
我有一个表将父对象与其各自的子对象链接起来。我有另一张桌子,上面有所有物体(父母和孩子)及其各自的图像。但是,只为父对象设置图像。我想更新最后一个表并将childs图像设置为已为其父图像设置的图像。此外,由于每个对象有多个图像,我想特别设置一个,我可以根据属性列来了解它。
我的表格如下:
RelationTable
子-ID
父-ID
ImageTable
对象的id
属性-ID
图像-URL
这是一个例子,以澄清事情:
RelationsTable
child-id |父ID
3 | 1
4 | 1
5 | 2
ImageTable
object-id | attribute-id |图像-URL
1 | goodimage | image1.jpg
1 | badimage | image1b.jpg
2 | goodimage | image2.jpg
2 | badimage | image2b.jpg
3 | goodimage |无
3 | badimage |无
4 | goodimage |无
4 | badimage |无
5 | goodimage |无
5 | badimage |无
所以,我想将对象3,4和5(子对象)的图像设置为各自的父图像,但是设置为“正确”图像,即具有'goodimage'作为属性id的图像。
最后应该看起来像:
1 | goodimage | image1.jpg
1 | badimage | image1b.jpg
2 | goodimage | image2.jpg
2 | badimage | image2b.jpg
3 | goodimage | image1.jpg
3 | badimage |无
4 | goodimage | image1.jpg
4 | badimage |无
5 | goodimage | image2.jpg
5 | badimage |无
实际上,我并不关心'badimage'是否也被设置,但重要的是'goodimage'。
我一直在尝试这样的事情:
UPDATE ImageTable
SET image = (SELECT image-url FROM ImageTable WHERE ImageTable.object-id = RelationTable.parent-id AND ImageTable.attribute-id = 'goodimage')
WHERE ImageTable.object-id = RelationTable.child-id AND ImageTable.attribute-id = 'goodimage'
但它不起作用,因为它不是正确的SQL语法。我不知道是否应该使用变量(从未使用过)或者只使用一个SQL句子来完成。
非常感谢任何帮助。
答案 0 :(得分:0)
首先,如果父和子之间的关系是1:n,为什么不将这些信息添加到同一个表中?例如fieldname“parentid”(如果它为空/ null,它只是父级)。好处:您不需要额外的表,并且可以根据需要轻松创建层次结构。
对于图像,我想你想在你的代码中的某个地方显示它,但是应该更容易修改SELECT以获得父亲的图像 - 网址没有为孩子提供图像。好处:当您获得新条目时无需更新表格,并且某些子条目也可以拥有自己的图像(如果需要)。
编辑:刚刚注意到你对开源项目部分的新评论,当然这使得很难改变数据库设计。但也许将一些问题转移到编程方面仍然更容易(除非这也是由开源软件处理的)。
答案 1 :(得分:0)
这样的事情?
注意:
这可以合并为一个 非子查询声明,但我是 懒惰。
我没有测试,期待拼写错误
;WITH goodlist AS
(
SELECT child-id, image-url
FROM relationstable
left join imagetable on relationstable.child-id = relationstable.child-id and attribute-id = "goodimage"
)
UPATE imagetable
set imagetable.image-url =
(SELECT top 1 image-url from goodlist where child-id = imagetable.object-id)
WHERE imagetable.image-url = "no"