SQL OUTER JOIN с NEWID для генерации случайных данных для каждой строки - PullRequest
1 голос
/ 15 марта 2010

Я хочу создать некоторые тестовые данные, поэтому для каждой строки в таблице я хочу вставить 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

Единственная проблема - это возвращает одинаковые значения для каждой строки. Как я могу заказать их случайно?

Ответы [ 2 ]

1 голос
/ 15 марта 2010

Что я обычно делаю, это создаю временную таблицу и определяю PK как GUID со значением по умолчанию newid (). Вам понадобится оператор создания таблицы для этого, без выбора в. Затем я вставляю свои записи в него, а затем могу упорядочить по полю Id и выбрать первую десятку.

1 голос
/ 15 марта 2010

Проблема в том, что любая функция, которую вы вызываете, будет оценена только один раз. Как насчет чего-то вроде этого:

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 
...