我有一个带有两个表的MySQL数据库。 表1看起来像这样:
uid | text |reference |
-------------------------------------
1 | | 1 |
2 | | 1,2 |
3 | | 2 |
4 | | 3 |
5 | | 1,3,2,4,5 |
6 | | 5 |
7 | | 4 |
表2看起来像这样
uid | text |
-------------------------
1 | text1 |
2 | text2 |
3 | text3 |
4 | text4 |
5 | text5 |
6 | text6 |
7 | text7 |
我想更新Table1,因此它变为:
uid | text | reference |
---------------------------------------------------
1 | text1 | 1 |
2 | text2 text2 | 1,2 |
3 | text2 | 2 |
4 | text3 | 3 |
5 | text1 text3 text2 text2 text5 | 1,3,2,4,5 |
6 | text5 | 5 |
7 | text4 | 4 |
我发现了以下命令并且无法使其适应我的案例
UPDATE table1 AS text
INNER JOIN table2 AS text
ON table1.reference = table2.reference
SET table1.text = table2.text
table1
中的文字列应与[{1}}与table1.reference
进行比较。如果参考值为1,则与table2.uid
对应的文本将被复制到table2.uid #1
。如果引用为1,2,则将复制与table1.text
对应的文本。
谢谢!
答案 0 :(得分:0)
此问题说明了为什么在单行中存储以逗号分隔的值是不好的做法。这种关系更好地使用附加关系表建模,在您的情况下看起来像这样:
TableRef
uid |referenceUid |
--------------------
1 | 1 |
2 | 1 |
2 | 2 |
3 | 2 |
4 | 3 |
5 | 1 |
5 | 2 |
5 | 3 |
5 | 4 |
5 | 5 |
... | ... |
这样,您可以像这样进行所需的更新
update Table1 t1, (
select t3.uid, group_concat(t2.text order by t2.text separator ' ') as text
from TableRef t3
join Table2 t2
on t3.referenceUid = t2.uid
group by t3.uid
) t4
set t1.text = t4.text
where t1.uid = t4.uid
您可以在行动here
中看到此查询