用另一个表中的随机条目更新表的列

Posted

技术标签:

【中文标题】用另一个表中的随机条目更新表的列【英文标题】:Update a column of table with random entry from another table 【发布时间】:2017-08-04 01:44:28 【问题描述】:
update testdata.test
   set abcd = (select abc 
                 from DATA1
                order by random()
                limit 1
              ) 

这样做只会使表 DATA1 中的一个随机条目填充到 TEST 表的所有行中。

我需要的是 -> 生成从 DATA 1 表到 TEST 表的随机条目的每一行

【问题讨论】:

那么给定的随机值abc 是否会在结果集中出现多次? DATA1 总是有更多的行然后测试?.. @Tim Biegelesian 是的,它可以出现 @Vao Tsun DATA1 的行数少于测试数据..但这没关系,我只想从 DATA1 填充随机数据进行测试..所以即使 DATA1 中有 4 行,这些也必须出现在 TEST 表中随机填充多少测试列 Populate random data from another table的可能重复 【参考方案1】:

从子查询中引用外部表,使其成为相关子查询。然后它必须为每一行执行:

UPDATE testdata.test
SET abcd = (SELECT CASE WHEN test.abcd IS NOT DISTINCT FROM test.abcd
                        THEN abc 
                   END
            FROM data1
            ORDER BY random()
            LIMIT 1
           );

【讨论】:

我在 postgresql 中的 distinct(当 ipreal 不不同时选择案例)出现错误。我尝试使用条件而不是不同的 WHEN test.abcd test.abcd THEN abc -> 查询执行但没有更新 对此感到抱歉.. 错误 - >无效操作:“DISTINCT”位置或附近的语法错误:70; SET ipreal = (当 ipreal 与 ipreal 没有区别时选择 CASE 那你肯定用的不是普通的 PostgreSQL,因为我运行了上面的语句并没有得到这样的错误。 你在开玩笑吧? 8.0.2?但即使是这个古老的版本(至少安装最新的版本!)也有 IS DISTINCT FROM 运算符。

以上是关于用另一个表中的随机条目更新表的列的主要内容,如果未能解决你的问题,请参考以下文章

Netezza - 用另一张表中的最大数据更新一张表

使用 SQL 更新 Spark 表中的列

用另一个表中的列值替换列的空值

Redshift:使用来自另一个表的随机数据更新或插入列中的每一行

SQL:根据另一个表的计数结果更新一个表中的列

从表中选择最新的带时间戳的值,该表对于一个列 id 有多个条目,对于每个唯一的列 id 和来自另一个表的数据