0

抱歉,如果标题没有应有的描述性,但是很难用一句话来解释我要做什么;)。

我有一张表将父对象与其各自的子对象链接起来。我还有一张桌子,上面有所有对象(父母和孩子)及其各自的图像。但是,图像只是为父对象设置的。我想更新最后一张表并将子图像设置为其父图像已设置的相同图像。此外,由于每个对象有多个图像,我想特别设置一个,我可以根据属性列知道。

我的表看起来像:

关系表

孩子身份

父母身份

图像表

对象标识

属性标识

图片网址

为了澄清事情,这里举了一个例子:

关系表

儿童ID | 父母身份

3 | 1

4 | 1

5 | 2

图像表

对象 ID | 属性 ID | 图片网址

1 | 好形象 | 图像1.jpg

1 | 坏形象 | 图像1b.jpg

2 | 好形象 | 图像2.jpg

2 | 坏形象 | 图像2b.jpg

3 | 好形象 | 不

3 | 坏形象 | 不

4 | 好形象 | 不

4 | 坏形象 | 不

5 | 好形象 | 不

5 | 坏形象 | 不

因此,我想将对象 3、4 和 5(子对象)的图像设置为其各自的父图像,但设置为“正确”的图像,即具有“goodimage”作为属性 ID 的图像。

最后它应该看起来像:

1 | 好形象 | 图像1.jpg

1 | 坏形象 | 图像1b.jpg

2 | 好形象 | 图像2.jpg

2 | 坏形象 | 图像2b.jpg

3 | 好形象 | 图像1.jpg

3 | 坏形象 | 不

4 | 好形象 | 图像1.jpg

4 | 坏形象 | 不

5 | 好形象 | 图像2.jpg

5 | 坏形象 | 不

实际上,我不在乎是否也设置了“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 语句来完成。

任何帮助将非常感激。

4

2 回答 2

0

首先,如果父母和孩子之间的关系是1:n,你为什么不把这些信息添加到同一张表中呢?例如字段名“parentid”(如果它为空/null,则它只是一个父级)。好处:您不需要额外的表,并且可以在需要时轻松创建层次结构。

对于图像,我想你想在代码中的某个地方显示它,但是应该更容易修改 SELECT 以获取父级的图像 URL,因为没有为子级提供图像。好处:当您获得新条目时无需更新表格,并且一些子条目也可以拥有自己的图像(如果需要)。

编辑:刚刚注意到您对开源项目部分的新评论,当然这使得更改数据库设计变得困难。但也许将一些问题转移到编程方面仍然更容易(除非这也由开源软件处理)。

于 2009-11-30T11:53:20.807 回答
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"
于 2009-11-30T21:22:18.380 回答