sql - 使用来自另一个表的随机值更新 SQL 表(无连接条件)

标签 sql random common-table-expression

我正在编写一个脚本来匿名化包含患者数据的表格。 我生成了一个包含 50,000 行匿名数据的表。

我需要用生成表中的数据更新患者表中的一些列。

当然,我已经阅读了有关更新表格以及如何从另一个表格中选择随机行的内容。我想不通的是如何将其合并到一个查询中。

我已经将 CTE 视为一种可能的解决方案,但我不明白它是如何工作的。我遇到的主要问题之一是生成的表中没有任何键,即使它有它也不应该是相关的,因为我只想迭代患者表的所有行,用随机行更新它的值来自生成的表。

我有以下内容:

Update Patients
Set Patients.pat_FirstName = fn.GivenName,
     pat_LastName = fn.SurName, 
     pat_StreetName = fn.StreetAddress,
     pat_PostalCode = fn.ZipCode,
     pat_City = fn.City,
     pat_DateOfBirth = fn.BirthDay,
from
     ( Select Top 1,
     GivenName, 
     SurName,
     StreetAddress,
     ZipCode,
     City,
     Birthday
from FakeNameGenerator tablesample(1000 rows)) as fn


但这只会执行一次“随机”,用相同的值填充患者表中的每一行。就像我之前说的,它可以(应该是??)用 CTE(理货?)表来解决,但是如何解决?

我即将掌握 C# 并编写该死的代码...

最佳答案

另一种方法是将连续的数字列添加到 FakeNameGenerator

ALTER TABLE FakeNameGenerator ADD ID INT NOT NULL IDENTITY(1,1)

CREATE UNIQUE NONCLUSTERED INDEX ix ON FakeNameGenerator(ID)

那么就变成了生成一个1到50000之间的随机数的问题

UPDATE P
SET P.pat_FirstName = F.GivenName /*...*/
FROM Patients P
INNER LOOP JOIN FakeNameGenerator F ON F.ID = (1 +  ABS(CRYPT_GEN_RANDOM(8)%50000))

INNER LOOP JOIN 提示强制执行以 Patients 作为驱动表的嵌套循环连接。它在 FakeNameGenerator 中寻找每一行,重新评估要寻找的 ID

关于sql - 使用来自另一个表的随机值更新 SQL 表(无连接条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14725355/

相关文章:

mysql - 检索具有多个关联条目的行

SQL转换错误/如何将参数插入select语句?

c# - 如何在跨越多天的时间安排中获得一天的关闭时间

jquery - 使用 jQuery 每 4 秒显示 3 种随机颜色

mysql - 如何在 MySQL 的内部查询中访问外部查询的值

javascript - 将选择推送到另一个阵列进行存储

javascript - 随机 1-5 5x5 阵列

sql-server - 成对重复、相同的行。仅更新其中之一

sql-server - 用于确定对象层次结构深度的 CTE 与 T-SQL 循环

sql - 为什么递归 CTE 按程序运行分析函数 (ROW_NUMBER)?