次のことを行う必要があります(これは疑似コードです):
UPDATE Cars SET Engine = (SELECT EngineName FROM Engines WHERE Type = 3)[RANDOMIZE_INDEX_FROM_1_TO_SUBQUERY_COUNT]
したがって、基本的には、サブクエリからのランダムなエンジンをupdate
すべて使用する必要があります。これは可能ですか?Cars table
MSSQL
次のことを行う必要があります(これは疑似コードです):
UPDATE Cars SET Engine = (SELECT EngineName FROM Engines WHERE Type = 3)[RANDOMIZE_INDEX_FROM_1_TO_SUBQUERY_COUNT]
したがって、基本的には、サブクエリからのランダムなエンジンをupdate
すべて使用する必要があります。これは可能ですか?Cars table
MSSQL
Common Table Expression を使用してエンジン クエリの行番号を指定し、ランダムな行番号を選択できます。
100 個のエンジンがあると仮定すると、クエリは次のようになります。
;with CTE as (
SELECT EngineName, ROW_NUMBER() over(order by EngineName) as rn
FROM Engines WHERE Type = 3
)
UPDATE Cars SET Engine = (SELECT EngineName FROM CTE WHERE where rn = 1+CAST(rand()*100 as int))
更新: エンジンの数に関係なく
;with CTE as (
SELECT EngineName, ROW_NUMBER() over(order by EngineName) as rn
FROM Engines WHERE Type = 3
)
UPDATE Cars SET Engine = (SELECT EngineName FROM CTE WHERE where rn = 1+CAST(rand()*(SELECT COUNT(1) FROM CTE) as int))
更新 2: 複数行の更新 (Cars テーブルに ID フィールドまたは並べ替え可能なその他のフィールドがあると仮定)
;WITH CTE_CARS AS (SELECT ENGINE, ROW_NUMBER() OVER (ORDER BY ID) AS RN FROM CARS)
,CTE_ENGINES AS (SELECT EngineName, ROW_NUMBER() OVER (ORDER BY NEWID()) AS RN FROM Engines WHERE Type = 3)
UPDATE CTE_CARS SET CTE_CARS.ENGINE = CTE_ENGINES.EngineName
FROM CTE_CARS JOIN CTE_ENGINES ON CTE_CARS.RN = CTE_ENGINES.RN
更新 3: エンジンよりも多くの車がある場合は、最後の FROM を次のように置き換えます
FROM CTE_CARS JOIN CTE_ENGINES ON (CTE_CARS.RN - CTE_ENGINES.RN) % (SELECT COUNT(1) FROM CTE_ENGINES) = 0