Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用条件-SQL将内容添加到同一列_Mysql_Sql_Database - Fatal编程技术网

Mysql 使用条件-SQL将内容添加到同一列

Mysql 使用条件-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_中的列标记中

我有点麻烦。 我有一张桌子:

表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_中的列标记中添加如下-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产品一起使用对我来说就像是倒退了一步。@草莓非规范化联接对于事务密集型数据可能不是一个好主意(我可能不是,我的意思是我同意它不是),但是报告有合法的用途,例如。我不知道这是哪种情况,但我会在回答中把区别说得更清楚,谢谢。