从具有多行的表更新SQL

时间:2013-06-27 20:49:30

标签: sql sql-update

我们正在开发一个项目,将图像加载到表格中,并为它们提供项目编号,图像大小,图像链接。现在我们需要将此表与库存表合并。库存表每个项目可以有10个不同的图片,但在我们的图像表中,我们只有3行。此表中有多个项目编号,每个编号都有不同的图像和大小。我们如何使用table2中的链接更新table1并让它们填写所有10张图片?

update table1
 if (imglink is not null)
    set
  imgsize1 = c.imagesize,
  imglink1= c.imageLink
  else if (imglink1 is not null)
  set
  imgsize2 = c.imagesize
  imglink2= c.imageLink
  else if (imglink2 is not null)
  set
  imgsize3 = c.imagesize
  imglink3 = c.imageLink
  else if (imglink3 is not null)
  set
  imgsize4 = c.imagesize
  imglink4 = c.imageLink
  else if (imglink4 is not null)
  set
  imgsize5 = c.imagesize
  imglink5 = c.imageLink
  else if (imglink5 is not null)
  set
  imgsize6 = c.imagesize
  imglink6 = c.imageLink

  else if (imglink6 is not null)
  set
  imgsize7 = c.imagesize
  imglink7 = c.imageLink
  else if (imglink7 is not null)
  set
  imgsize8 = c.imagesize
  imglink8 = c.imageLink
  else 
  set
  imagesize = c.imagesize
  imagelink = c.imageLink


from table2 as c
 WHERE c.itemno = i.itemno

我们想要做的事情有意义吗?任何帮助,将不胜感激。提前谢谢。

编辑:我们正在使用MS SQL 2008。 图像表是从我们的一个客户端导入的,这是它给出的格式。只是一个有3列的大桌子。 Itemno,imagesize,imageLink。

示例数据: table1(库存表) -

itemno | imageLink  | imageLink1 | imageLink2 | imageLink3 | imageLink4 | imageLink5 | imageLink6 | imageLink7 | imageLink8 | imageLink9

table2(图像表) -

itemno | imageLink  | size
itemno | imageLink1 | size
itemno | imageLink2 | size
itemno | imageLink3 | size
itemno | imageLink4 | size
itemno | imageLink5 | size
itemno | imageLink6 | size
itemno | imageLink7 | size
itemno | imageLink8 | size
itemno | imageLink9 | size

1 个答案:

答案 0 :(得分:0)

您无法将IF放在SET UPDATE查询中。有条件地设置列的方式是:

SET <colName> = IF(<condition>, <newvalue>, <colName>)

如果条件为真,则更改该值,否则只将当前值分配回列。

要根据另一个表更新一个表,一般语法为:

UPDATE table1 t1
JOIN table2 t2 ON t1.itemno = t2.itemno
SET t1.col1 = <expression which may reference t2>,
    t1.col2 = <expression which may reference t2>,
    ...
WHERE ... /* this clause is optional */

我不了解更新的具体逻辑,但希望这足以让您将所需内容翻译成正确的语法。如果没有,请将更新后的查询添加到问题中,我们会尝试让您前进。