我遇到了麻烦。 我有一张桌子:
表格测试1
Id_keyword Id_product
2 1280
2 1281
3 1280
4 3478
4 3912
5 1280
etc.
表格测试2
ID_product Tag
1
2
3
4
...
1280 2,3,5
1281 2
etc.
我需要添加表test1 Id_keyword中的Tag Tag,如下所示 - 2,3,5
我尝试了类似的东西,但不知道如何制作条件 - 如果它找到了product_id,它将添加到列标记带有逗号的keyword_id,如果找到相同的product_id,它将添加到内容:< / p>
UPDATE test2 SET Tag=(SELECT id_keyword FROM test1 WHERE test1.Id_product=test2.ID_product)
有人可以帮我吗? 我找不到任何解决方案。
答案 0 :(得分:2)
你可以只是一个简单的更新加入;
UPDATE test2
JOIN (
SELECT id_product, GROUP_CONCAT(id_keyword ORDER BY id_keyword) tag
FROM test1 GROUP BY id_product) z
ON z.id_product = test2.id_product
SET test2.tag = z.tag
这将test2与将所有id_keywords pr id_product连接到名为tag的临时字段的查询连接,并将该标记值分配给test2.tag。
A simple SQLfiddle to test with
正如@strawberry在评论中指出的那样,将数据逗号分隔在一个表中以便稍后将其作为单独的项进行查询不是一个好主意,因为数据库将无法再对其进行优化以任何方式查询。如果这是您正在尝试的内容,那么最好将数据存储规范化,就像它已经存储一样。
答案 1 :(得分:0)
我需要更新此代码。我把里面的列放了。
CREATE TABLE test1
(`Id_keyword` int, `lang` int, `Id_product` int)
;
INSERT INTO test1
(`Id_keyword`,`lang`, `Id_product`)
VALUES
(2,4, 1280),
(2,4, 1281),
(3,4, 1280),
(4,4, 3478),
(4,4, 3912),
(5,4, 1280)
;
CREATE TABLE test2
(`ID_product` int, `lang` int, `Tag` varchar(32))
;
INSERT INTO test2
(`ID_product`,`lang`, `Tag`)
VALUES
(1280,4, NULL),
(1281,3, NULL)
;
UPDATE test2
JOIN (
SELECT id_product, GROUP_CONCAT(id_keyword ORDER BY id_keyword) tag
FROM test1 GROUP BY id_product) z
ON z.id_product = test2.id_product
SET test2.tag = z.tag
我需要提出一个条件: 在哪里test1.lang = test2.lang
但不知道怎么放进去。
感谢您的帮助。