【问题标题】:Database Random to many to many数据库随机到多对多
【发布时间】:2015-05-08 23:49:44
【问题描述】:

我是新手。 我有一个存储 User_id 的 table1 和另一个存储 data_id 的 table2 data_id 将从 table2 中随机选择,所有 user_id 都应具有所有随机 data_id。

                          table1                table2    
                          user1                 data1
                          user2                 data2
                          user3                 data3
                          user4                 data4
                          user5                 data5

我想从 table2 中获取 3 个随机数据并将这些数据与 user_id's 写入 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                   

【问题讨论】:

    标签: sql-server database random relationship


    【解决方案1】:

    基于@Dan Guzman 的答案,我认为它有参考并重新修改了答案。如果它对你有用,请检查并告诉我

    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
    

    【讨论】:

      【解决方案2】:

      假设您希望为每个用户提供相同的 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;
      

      【讨论】:

      • 通过给出 new_ID() 模式的数据在我们每次执行时都会发生变化,并且 Cross apply 没有给出确切的结果@Dan Guzman
      • 您是说您想要在每次运行查询时都不会改变的随机值?我知道您会使用查询将结果插入 table3,其中分配的值不会改变。
      猜你喜欢
      • 2016-02-04
      • 2021-12-02
      • 2023-03-15
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多