3

Product と ProductImage という 2 つのテーブルがあります。

2 つのテーブル間には 1-n の関係があります。商品によっては、1つの商品と複数の画像があります。

製品ビューを作成し、製品ごとに ProductImage テーブルからランダムに 1 つの画像を取得したいと考えています。

サンプルデータ: 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 |
+-----------+------+-------------+

またはなど...

毎回違うはずです。

4

2 に答える 2

3

これを試してみてください

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

于 2013-06-08T11:14:42.143 に答える
1
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
于 2013-06-08T11:32:11.693 に答える