Mysql 使用条件-SQL将内容添加到同一列
我有点麻烦。 我有一张桌子: 表test1Mysql 使用条件-SQL将内容添加到同一列,mysql,sql,database,Mysql,Sql,Database,我有点麻烦。 我有一张桌子: 表test1 Id_keyword Id_product 2 1280 2 1281 3 1280 4 3478 4 3912 5 1280 etc. 表test2 ID_product Tag 1 2 3 4 ... 1280 2,3,5 1281 2 etc. 我需要向表test1id_中的列标记中
Id_keyword Id_product
2 1280
2 1281
3 1280
4 3478
4 3912
5 1280
etc.
表test2
ID_product Tag
1
2
3
4
...
1280 2,3,5
1281 2
etc.
我需要向表test1id_中的列标记中添加如下-2,3,5关键字
我尝试过类似的方法,但不知道如何设置条件-如果它找到产品id,它将在列标记中添加带有逗号的关键字id,如果它找到相同的产品id,它将添加到内容中:
UPDATE test2 SET Tag=(SELECT id_keyword FROM test1 WHERE test1.Id_product=test2.ID_product)
有人能帮我吗?
我找不到任何解决方案。你只需要一个简单的更新加入
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_关键字pr id_product连接到一个名为tag的临时字段中,并将该标记值分配给test2.tag
正如@草莓在注释中指出的,将逗号分隔的数据存储在一个表中,以便以后将其作为单独的项进行查询不是一个好主意,因为数据库将不再能够以任何方式优化查询。如果您正试图这样做,那么最好保持存储的数据正常化,就像它已经存储一样。我需要更新此代码。我把朗列放在里面
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
但是我不知道怎么放进去
感谢您的帮助。将
group\u concat(id\u关键字)
与group by id\u产品一起使用对我来说就像是倒退了一步。@草莓非规范化联接对于事务密集型数据可能不是一个好主意(我可能不是,我的意思是我同意它不是),但是报告有合法的用途,例如。我不知道这是哪种情况,但我会在回答中把区别说得更清楚,谢谢。