在SQL中创建表

时间:2010-12-02 06:40:36

标签: sql

我可以获得一些帮助来创建此查询吗?

用户预订产品视频广告位以宣传一个产品视频。预订表记录了这些预订。预订点被分配给用户而不是产品或视频。 用户排名第一的产品排名第一的视频将是广告的视频。

预订表

id   user_id   position  
---- -----     --------       
1     100        1             
2     150        2               

用户表 用户可以预订1-n

id     name
----   ----
100    John Smith
150    Herby Brown

产品表 用户可以拥有1-n个产品

id    name      user_id   rank   
---   ----      -------   ----     
1     bike        100        1            
2     stereo      100        2 
3     computer    100        3
4     notebook    150        1
5     scooter     150        2

视频表 一个产品可以有1-n个视频

id    name            product_id      user_id   rank   
---   ----            -----------     -------   ----   
1     bike video1        1               100      1            
2     bike video2        1               100      2 
3     computer video     3               100      3
4     notebook video     4               150      1
5     scooter video      5               150      2

所以,查询用文字读取: 对于每个预订记录,获取预订用户排名第一的产品排名第一的视频。通过预订位置订购结果。

1 个答案:

答案 0 :(得分:1)

SELECT v.id, 
       v.name, 
       v.rank, 
       v.user_id, 
       u.name AS uname 
FROM   videos v 
       JOIN users u 
         ON u.id = v.user_id 
       JOIN bookings b 
         ON u.id = b.user_id 
WHERE  v.product_id = (SELECT id 
                       FROM   products 
                       WHERE  user_id = b.user_id 
                       ORDER  BY rank ASC 
                       LIMIT  1) 
ORDER  BY b.position ASC, v.rank ASC

一些简化的查询:

SELECT v.id, 
       v.name, 
       v.user_id, 
       u.name AS uname, 
       p.name AS pname 
FROM   videos v 
       JOIN users u 
         ON u.id = v.user_id 
       JOIN bookings b 
         ON u.id = b.user_id 
       JOIN products p 
         ON p.id = v.product_id 
WHERE  v.product_id = (SELECT id 
                       FROM   products 
                       WHERE  user_id = b.user_id 
                              AND rank = 1) 
       AND v.rank = 1 
ORDER  BY b.position ASC