mySQL,查找和替换,在一个表中使用查找,在另一个表中替换

时间:2016-01-21 11:55:04

标签: mysql sql

我目前有两张表,但没有加入。

tbl_prod
cat_ids        prod_txt
1,2,3          some text

tbl_cat
category_id   cat_name
1             A
2             M
3             P

我需要执行一个查询,该查询将更新“cat_ids”的内容。列,所以内容如下所示:

  tbl_prod
  cat_ids        prod_txt
  A,M,P          some text

这在mySQL中是否可行,或者我最好创建一个脚本来执行此操作。感谢

1 个答案:

答案 0 :(得分:1)

正确的方式:

规范化你的表格。将外键存储为csv列是非常糟糕的主意。

解决方法:

  

我无法控制输出,所以规范化并不是真正的选择

SELECT GROUP_CONCAT(tc.cat_name ORDER BY tc.category_id) AS cat_ids,
       MAX(prod_txt) AS prod_txt
FROM tbl_prod AS tp
JOIN tbl_cat AS tc
  ON FIND_IN_SET(tc.category_id, tp.cat_ids) > 0
GROUP BY cat_ids;

SqlFiddleDemo

输出:

╔══════════╦═══════════╗
║ cat_ids  ║ prod_txt  ║
╠══════════╬═══════════╣
║ A,M,P    ║ some text ║
╚══════════╩═══════════╝

更新

UPDATE tbl_prod t
join (SELECT GROUP_CONCAT(tc.cat_name ORDER BY tc.category_id) AS cat_ids_rep,
             MAX(tp.cat_ids) AS cat_ids 
     FROM tbl_prod AS tp
     JOIN tbl_cat AS tc
       ON FIND_IN_SET(tc.category_id, tp.cat_ids) > 0
      GROUP BY cat_ids
    ) AS sub
ON t.cat_ids = sub.cat_ids
SET t.cat_ids = sub.cat_ids_rep;

SqlFiddleDemo2