数据库随机到多对多

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