数据库随机到多对多
Database Random to many to many
我是新手。
我有一个存储 User_id 的表 1 和另一个存储 data_id 的表 2
Data_id 将从表 2 中随机选择,所有 user_id 都应具有所有随机 data_id.
table1 table2
user1 data1
user2 data2
user3 data3
user4 data4
user5 data5
我想从 table2 中获取 3 个随机数据并将这些数据 user_id 写入 table3
它应该如下所示
table3
user1 data2
user1 data3
user1 data4
user2 data2
user2 data3
user2 data4
user3 data2
user3 data3
user3 data4
user4 data2
user4 data3
user4 data4
user5 data2
user5 data3
user5 data4
假设您想要为每个用户提供相同的 3 个随机 data_id 值,一种方法是使用 CROSS APPLY
:
CREATE TABLE dbo.table1 ( user_id varchar(10) NOT NULL )
INSERT INTO dbo.table1
VALUES ( 'user1' )
, ( 'user2' )
, ( 'user3' )
, ( 'user4' )
, ( 'user5' );
CREATE TABLE dbo.table2 ( data_id varchar(10) NOT NULL );
INSERT INTO dbo.table2
VALUES ( 'data1' )
, ( 'data2' )
, ( 'data3' )
, ( 'data4' )
, ( 'data5' );
SELECT user_id
, data_id
FROM dbo.table1
CROSS APPLY ( SELECT TOP ( 3 )
data_id
FROM dbo.table2
ORDER BY NEWID()
) AS table2
ORDER BY user_id
, data_id;
基于@Dan Guzman 的回答,我把它作为参考并重新修改了 answer.If 它对你来说工作正常,只需检查并告诉我
declare @table1 TABLE ( user_id varchar(10) NOT NULL )
INSERT INTO @table1
VALUES ( 'user1' )
, ( 'user2' )
, ( 'user3' )
, ( 'user4' )
, ( 'user5' );
declare @table2 TABLE ( data_id varchar(10) NOT NULL );
INSERT INTO @table2
VALUES ( 'data1' )
, ( 'data2' )
, ( 'data3' )
, ( 'data4' )
, ( 'data5' );
;with cte as (
SELECT user_id
, data_id
FROM @table1
, ( SELECT TOP ( 4 )
data_id
FROM @table2
ORDER BY data_id
) AS table2
)
Select A.user_id,A.data_id from (
select c.user_id,
c.data_id,
ROW_NUMBER()OVER(PARTITION BY c.user_id ORDER BY c.user_id,c.data_id) RN
from cte C
)A
where A.Rn <> 1
我是新手。 我有一个存储 User_id 的表 1 和另一个存储 data_id 的表 2 Data_id 将从表 2 中随机选择,所有 user_id 都应具有所有随机 data_id.
table1 table2
user1 data1
user2 data2
user3 data3
user4 data4
user5 data5
我想从 table2 中获取 3 个随机数据并将这些数据 user_id 写入 table3 它应该如下所示
table3
user1 data2
user1 data3
user1 data4
user2 data2
user2 data3
user2 data4
user3 data2
user3 data3
user3 data4
user4 data2
user4 data3
user4 data4
user5 data2
user5 data3
user5 data4
假设您想要为每个用户提供相同的 3 个随机 data_id 值,一种方法是使用 CROSS APPLY
:
CREATE TABLE dbo.table1 ( user_id varchar(10) NOT NULL )
INSERT INTO dbo.table1
VALUES ( 'user1' )
, ( 'user2' )
, ( 'user3' )
, ( 'user4' )
, ( 'user5' );
CREATE TABLE dbo.table2 ( data_id varchar(10) NOT NULL );
INSERT INTO dbo.table2
VALUES ( 'data1' )
, ( 'data2' )
, ( 'data3' )
, ( 'data4' )
, ( 'data5' );
SELECT user_id
, data_id
FROM dbo.table1
CROSS APPLY ( SELECT TOP ( 3 )
data_id
FROM dbo.table2
ORDER BY NEWID()
) AS table2
ORDER BY user_id
, data_id;
基于@Dan Guzman 的回答,我把它作为参考并重新修改了 answer.If 它对你来说工作正常,只需检查并告诉我
declare @table1 TABLE ( user_id varchar(10) NOT NULL )
INSERT INTO @table1
VALUES ( 'user1' )
, ( 'user2' )
, ( 'user3' )
, ( 'user4' )
, ( 'user5' );
declare @table2 TABLE ( data_id varchar(10) NOT NULL );
INSERT INTO @table2
VALUES ( 'data1' )
, ( 'data2' )
, ( 'data3' )
, ( 'data4' )
, ( 'data5' );
;with cte as (
SELECT user_id
, data_id
FROM @table1
, ( SELECT TOP ( 4 )
data_id
FROM @table2
ORDER BY data_id
) AS table2
)
Select A.user_id,A.data_id from (
select c.user_id,
c.data_id,
ROW_NUMBER()OVER(PARTITION BY c.user_id ORDER BY c.user_id,c.data_id) RN
from cte C
)A
where A.Rn <> 1