一尘不染

如何使用T-SQL``删除''随机记录

sql

这是一个实际上很难回答的简单问题,因为“拣选”具有特殊含义。

我需要给每个人三个随机选择(并选择1、2和3的选择/行数)。很难做到的是,人员和选秀权来自不同的表,并且人员和选秀权之间没有逻辑上的联系。

我能得到的最接近的:

SELECT TOP 15 database_id, create_date, RowNo, cs.name FROM sys.databases
CROSS apply ( 
  SELECT top 3 Row_number()OVER(ORDER BY (SELECT NULL)) AS RowNo,*
  FROM (SELECT top 3 name from sys.all_views ORDER BY NEWID()) T
  ) cs

我知道上面的内容不是人选,而是一个有效的SQL,任何人都可以测试它而无需先创建人选表。和,

它说明了我面临的问题-

上面的SQL将给每个人相同的选择,而我需要给不同的人不同的选择。

怎么做?谢谢。


阅读 150

收藏
2021-05-16

共1个答案

一尘不染

在中添加相关条件CROSS APPLY将解决您的问题

SELECT TOP 15 database_id,
              create_date,
              RowNo,
              cs.NAME
FROM   sys.databases d
       CROSS apply (SELECT TOP 3 Row_number() OVER(ORDER BY (SELECT NULL)) AS RowNo, *
                    FROM   (SELECT TOP 3 NAME
                            FROM   sys.all_views v
                            WHERE  d.NAME = d.NAME --Here
                            ORDER  BY Newid()) T) cs

检查LHS和RHS子句中的alias名称Where是否相同,table并且相同column,只是对databases表中的每一行执行子查询

2021-05-16