【问题标题】:SQL OUTER JOIN with NEWID to generate random data for each rowSQL OUTER JOIN 与 NEWID 为每一行生成随机数据
【发布时间】:2010-03-15 14:36:14
【问题描述】:

我想生成一些测试数据,因此对于表中的每一行,我想在另一个表中插入 10 个随机行,见下文:

INSERT INTO CarFeatures 
  (carID, featureID)
SELECT C.ID, F.ID
  FROM dbo.Cars AS C
OUTER APPLY (
     SELECT TOP 10 ID
       FROM dbo.Features
   ORDER BY NEWID()
) AS F

唯一的问题是这会为每一行返回相同的值。如何随机订购?

【问题讨论】:

    标签: sql sql-server random


    【解决方案1】:

    我通常做的是创建一个临时表并将 PK 定义为具有默认值 newid() 的 GUID。为此,您需要一个 create table 语句,而不是 select into。然后我将我的记录插入其中,然后我可以按 Id 字段排序并选择前十名。

    【讨论】:

      【解决方案2】:

      问题是您调用的任何函数都只会被评估一次。像这样的东西怎么样:

      SELECT ID, NEWID() AS guid
      INTO #temp
      FROM dbo.Features
      
      INSERT INTO CarFeatures (carID, featureID) 
      SELECT C.ID, F.ID 
      FROM dbo.Cars AS C 
      OUTER APPLY ( 
      SELECT TOP 10 *
      FROM #temp
      ORDER BY 2
      ) AS F 
      

      【讨论】:

      • 这似乎产生了相同的结果。
      • 我更改了查询以分离出 NEWID 调用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多