【问题标题】:Random Join in Sql ServerSql Server 中的随机连接
【发布时间】:2013-06-04 15:11:00
【问题描述】:

我有两个名为 Product 和 ProductImage 的表。

两个表之间存在 1-n 关系。一种产品和多个图像,具体取决于产品。

我想创建一个产品视图,我想从 ProductImage 表中为每个产品随机获取一张图片。

示例数据:http://sqlfiddle.com/#!6/43c69

我想要下面这样的东西。

+-----------+------+-------------+
| ProductId | Name |   WebPath   |
+-----------+------+-------------+
|         1 | Foo  | foowebpath2 |
|         2 | Boo  | boowebpath3 |
|         3 | Zoo  | zoowebpath1 |
+-----------+------+-------------+

+-----------+------+-------------+
| ProductId | Name |   WebPath   |
+-----------+------+-------------+
|         1 | Foo  | foowebpath1 |
|         2 | Boo  | boowebpath1 |
|         3 | Zoo  | zoowebpath6 |
+-----------+------+-------------+

+-----------+------+-------------+
| ProductId | Name |   WebPath   |
+-----------+------+-------------+
|         1 | Foo  | foowebpath4 |
|         2 | Boo  | boowebpath2 |
|         3 | Zoo  | zoowebpath5 |
+-----------+------+-------------+

等等……

每次都必须不一样。

【问题讨论】:

    标签: sql-server tsql join


    【解决方案1】:

    你应该试试这个

    SELECT *, (SELECT TOP 1 WebPath FROM ProductImage PI 
    WHERE PI.ProductId = P.ProductId order by NEWID()  ) as WebPart from Product P
    

    检查这个小提琴http://sqlfiddle.com/#!6/43c69/16

    【讨论】:

      【解决方案2】:
      WITH Image AS
      (
        SELECT *, RAND(ProductImageId) R
        FROM ProductImage 
      )
      
      SELECT p.*, i2.* FROM Product P
      INNER JOIN 
          (SELECT ProductId, MIN(R) R
           FROM Image
           GROUP BY ProductId) i1 ON i1.ProductId = p.ProductId
      INNER JOIN Image i2 ON i2.R = i1.R
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多