gpt4 book ai didi

MySQL:从另一个表的随机行复制多个值

转载 作者:行者123 更新时间:2023-11-28 23:12:19 33 4
gpt4 key购买 nike

我针对 Microsoft SQL Server 和 PostGresql 问过类似的问题。适用于 MySQL 的解决方案不适用于 MySQL。

我有两个表,stuffnonsense。我想将多个值从 nonsense 中的随机行复制到 stuff 中的每一行。当然,会有重复。

STUFF
+----+---------+-------------+--------+
| id | details | data | more |
+====+=========+=============+========+
| 1 | one | (null) | (null) |
| 2 | two | (null) | (null) |
| 3 | three | (null) | (null) |
| 4 | four | (null) | (null) |
| 5 | five | (null) | (null) |
| 6 | six | (null) | (null) |
+----+---------+-------------+--------+

NONSENSE
+----+---------+-------------+
| id | data | more |
+====+=========+=============+
| 1 | apple | accordion |
| 2 | banana | banjo |
| 3 | cherry | cor anglais |
+----+---------+-------------+

我希望能够复制到 stuff 表中:

UPDATE stuff SET data=?,more=?
FROM ?

我想得到类似下面的东西:

+-----+----------+---------+-------------+
| id | details | data | more |
+=====+==========+=========+=============+
| 1 | one | banana | banjo |
| 2 | two | apple | accordion |
| 3 | three | apple | accordion |
| 4 | four | cherry | cor anglais |
| 5 | five | banana | banjo |
| 6 | six | cherry | cor anglais |
+-----+----------+---------+-------------+

这是一个适用于 PostgreSQL 的 fiddle :http://sqlfiddle.com/#!17/313fb/8

如果它是单个值,我可以使用相关子查询,但它无法对来自同一行的多个值正常工作。

较新的 PostGresql 能够从相关子查询复制到多个列。 SQL Server OUTER APPLY 子句允许关联 FROM 子句中的子查询。这两种方法都不适用于 MySQL。

如何从另一个表中的随机行复制多个值?

最佳答案

不太好看,但我认为这是一个解决方案。

从一个带有 stuff.id 和随机 nonsense.id 的虚拟表开始:

select id,(select id from nonsense order by rand() limit 1) as nid from stuff;

stuff 表与此虚拟表作为子查询连接:

stuff s
join
(select id,(select id from nonsense order by rand() limit 1) as nid from stuff) sq
on s.id=sq.id

用相关的子查询更新s.datas.more:

set
s.data=(select data from nonsense where id=sq.nid),
s.more=(select more from nonsense where id=sq.nid);

这给出:

update
stuff s
join
(select id,(select id from nonsense order by rand() limit 1) as nid from stuff) sq
on s.id=sq.id
set
s.data=(select data from nonsense where id=sq.nid),
s.more=(select more from nonsense where id=sq.nid);

应该有一个更顺利的解决方案,但这是我能做的最好的。

关于MySQL:从另一个表的随机行复制多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45399182/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com