我一直迷失在这一个中并努力寻找合适的方法。希望那里的某个人可能知道做我想做的事情的好方法。 我有两个表,我想使用其他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行
我确定那里的某个人能够看到我出错的地方,并指出我正确的方向。
提前致谢
答案 0 :(得分:1)
您应该意识到table1
是存储此信息的正确方法。它被称为结点或关联表。有时您需要为了演示目的而进行连接,但是您需要保持连接表的完全灵活性。
您可以使用update
和join
以及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