H. *_*lyn 5 sql-server insert random relations
我有 3 个表,我想在其中生成UsersCategoryLink
.
如何在表中插入包含表UserCategoryLink
中UserID
随机用户和表中User
随机 id 的列Categories
。在这个SQL 小提琴中,您可以看到带有一些值的表。
UsersCategoryLink
必须填充随机用户和类别。UserID
和CategoryID
是主键,所以每个值都必须是唯一的。这是我的交叉引用表版本,您将在其中存储用户及其所属的类别。请注意,有一个主键聚集索引(UserID, CategoryID)
;这确保每一行都是唯一的:
CREATE TABLE dbo.XREFUserCategories
(
UserID INT NOT NULL
CONSTRAINT FK_XREFUserCategories_UserID
FOREIGN KEY
REFERENCES dbo.Users(UserID)
, CategoryID INT NOT NULL
CONSTRAINT FK_XREFUserCategories_CategoryID
FOREIGN KEY
REFERENCES dbo.Categories(CategoryID)
, CONSTRAINT PK_XREFUserCategories
PRIMARY KEY CLUSTERED (UserID, CategoryID)
);
GO
Run Code Online (Sandbox Code Playgroud)
由于您已经在Users
和Categories
表中拥有数据,因此您可以使用带有ROW_NUMBER
窗口函数的 CTE,其划分UserID
和排序基本上是随机值,NEWID()
。这允许我们为每个“用户”精确选择两个“类别”:
;WITH rs AS
(
SELECT u.UserID
, c.CategoryID
, rn = ROW_NUMBER() OVER (
PARTITION BY u.UserID
ORDER BY NEWID()
)
FROM dbo.Users u
, dbo.Categories c
)
INSERT INTO dbo.XREFUserCategories(UserID, CategoryID)
SELECT rs.UserID
, rs.CategoryID
FROM rs
WHERE rs.rn <= 2;
Run Code Online (Sandbox Code Playgroud)
以下是我在系统上生成的行示例:
归档时间: |
|
查看次数: |
1515 次 |
最近记录: |