将一个表中的单行连接到另一个表中的 n 个随机行

Posted

技术标签:

【中文标题】将一个表中的单行连接到另一个表中的 n 个随机行【英文标题】:Join a single row in one table to n random rows in another 【发布时间】:2011-03-04 08:44:01 【问题描述】:

是否可以在 SQL Server 中进行连接,将表 A 中的每一行连接到另一个中的 n 个随机行?例如,假设我有一个 Customer 表、一个 Product 表和一个 Order 表。我想将每个客户加入 5 个随机产品并将这些行插入到订单表中。 (并且每个客户都应该加入到他自己的 5 个随机行中,我不希望所有客户都加入到相同的 5 行中)。

这可能吗?我使用的是 SQL Server 2005,如果解决方案是特定的,那很好。

这是一个奇怪的要求,但我基本上是在制作一个小型数据生成器来生成一些随机数据。

【问题讨论】:

【参考方案1】:

看看这样的东西

DECLARE @Products TABLE(
        id Int,
        Prod VARCHAR(10)
)

DECLARE @Customer TABLE(
        id INT
)

INSERT INTO @Products SELECT 1, 'a'
INSERT INTO @Products SELECT 2, 'b'
INSERT INTO @Products SELECT 3, 'c'
INSERT INTO @Products SELECT 4, 'd'

INSERT INTO @Customer SELECT 1
INSERT INTO @Customer SELECT 2
--use a cross product select, BUT apply a random order number per customer,
--and only select the 'TOP N' items you require.
;WITH Vals AS (
        SELECT  c.id CustomerID,
                p.id ProductID,
                p.Prod,
                ROW_NUMBER() OVER( PARTITION BY c.ID ORDER BY NEWID()) RowNumber
        FROM    @Customer c,
                @Products p
)
SELECT  *
FROM    Vals
WHERE   RowNumber <= 2

【讨论】:

以上是关于将一个表中的单行连接到另一个表中的 n 个随机行的主要内容,如果未能解决你的问题,请参考以下文章

将一行连接到另一个表中的多行

Wordpress 用户和用户元 - 将一个表中的多行连接到另一个表中的一行

如何将一个表中的最新行连接到另一个表?

将一行连接到Mysql中另一个表中的多行

使用 codeigniter 将连接表中的列连接到另一列

抓取随机行,同时保持其他表的顺序