我需要使用从另一张表中选择的随机值来更新列的所有行。我正在尝试跟踪查询-
UPDATE TEST_CITY
SET "CITY" = (SELECT NAME FROM CITY SAMPLE (1 rows))
子查询在单独执行时会给我一个随机的城市,但在上述情况下,所有行都使用相同的值进行更新。
我还试图像下面那样通过id选择随机记录,但这也会更新具有相同值的所有行-
UPDATE TEST_CITY
SET "CITY" = (select c.name
from city c
where c.id = (SELECT uniform(1, 50, random()))
)
例如,该查询更新具有不同随机值的所有行-
UPDATE TEST_CITY
SET "name" = to_varchar(ABS(MOD(RANDOM(1), 1000000)))
当随机值是字符串并且应该来自单独的表时,我可以有与此等效的东西吗?
答案 0 :(得分:1)
我不特别了解Snowflake,但是其他数据库有时会使用易失性函数优化子查询,从而产生单个值。
我见过的一种解决方案是使用相关子查询:
UPDATE TEST_CITY
SET "CITY" = (select c.name
from city c
where c.id = (SELECT uniform(1, 50, random())) AND
test_city.city is not null -- any condition should do
);
尽管性能可能会变差,但也许order by
可以工作:
UPDATE TEST_CITY
SET "CITY" = (select c.name
from city c
order by random()
limit 1
);
答案 1 :(得分:0)
以下查询对我有用。我已经使用列名称上的哈希值来使更新适用于列的所有行-
更新“ TEST_CITY”设置“ CITY” =C。“ NAME”从C所在的C所在的城市。“ ID” = ABS(HASH(“ CITY”)%16917)+1;
16197是我在“城市”表中的行数。
谢谢
答案 2 :(得分:0)
下面的代码为我运行
UPDATE TEST_CITY a SET a.CITY = b.NAME FROM (
SELECT NAME ,row_number() over (order by random()) AS id from CITY) b;