SQL Update包含来自另一个表的串联数据

时间:2014-06-06 11:26:42

标签: mysql sql

我一直迷失在这一个中并努力寻找合适的方法。希望那里的某个人可能知道做我想做的事情的好方法。 我有两个表,我想使用其他ID相同的连接数据更新一个表。举个例子......

表1

  ItemID       CategoryID
       1                20
       1                30
       1                40
       2                10
       3                40
       3                20
       4                10
       4                20

表2

  ItemID        CatIDs
       1
       2
       3
       4

我想更新Table2.CatIDs,其中包含Item1匹配的Table1中的所有类别ID。当我把它写下来之后看起来很简单,但是在我尝试在网上找到内连接,子查询等之后,我一直得到#34;你的SQL语法中有错误...&#34 ;

我希望Table2看起来像

   ItemID        CatIDs
        1        20,30,40
        2        10
        3        40,20
        4        10,20

我已经尝试了内部联接以及子查询,而且最接近的我没有错误就是这个......

  UPDATE Table2
  SET Table2.CatIDs = Table2.CatIDs + ", " + 
  (SELECT CategoryID FROM Table1 WHERE Table2.ItemID = Table1.ItemID)

但它似乎没有完成,所有这一切都是使用相同的CatID更新四行然后给我留言       #1242 - 子查询返回超过1行

我确定那里的某个人能够看到我出错的地方,并指出我正确的方向。

提前致谢

2 个答案:

答案 0 :(得分:1)

您应该意识到table1是存储此信息的正确方法。它被称为结点或关联表。有时您需要为了演示目的而进行连接,但是您需要保持连接表的完全灵活性。

您可以使用updatejoin以及group by执行您想要的操作:

  UPDATE Table2 t2 JOIN
         (SELECT t1.ItemId, GROUP_CONCAT(t1.CategoryId SEPARATOR ', ') as cats
          FROM table1 t1
          GROUP BY t1.ItemId
         ) tc
         ON t2.ItemId = tc.ItemId
      SET t2.CatIDs = tc.cats;

答案 1 :(得分:0)

使用group_concat()尝试以下操作,您可以获取,分隔的列表,然后在表之间加入。但是存储逗号分隔值永远不是一个好主意。

update table2 t2
join
(
select ItemID,group_concat(CategoryID) as newcat
from table1 group by ItemID
) tab on t2.ItemID = tab.ItemID        
set t2.CatIDs = tab.newcat