我目前有两张表,但没有加入。
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中是否可行,或者我最好创建一个脚本来执行此操作。感谢
答案 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
强>