将每一行分配给另一个表中的每隔一行

时间:2019-05-21 12:38:18

标签: sql sql-server

我有2张桌子:

**Table user**
Username

**Table prize**
PrizeName

如何为每个奖品分配表奖中的行给我在表用户中拥有的每个用户名?

例如:

**Username**
Bob
Alice

**table prize**
Iphone5
Iphone6

结果:

**Username**    **prize**
Bob             iphone5
Alice           iphone5
Bob             iphone6
Alice           iphone6

5 个答案:

答案 0 :(得分:1)

这称为笛卡尔积。使用CROSS JOIN

SELECT *
FROM UserTable UT
     CROSS JOIN PrizeTable PT;

答案 1 :(得分:1)

如果我对您的理解正确,以下内容将为您提供所需的信息:

SELECT Username, Prize
FROM 
user
CROSS JOIN
prize
ORDER BY prize, Username

答案 2 :(得分:1)

使用交叉联接。 CROSS JOIN将返回结果集中的所有结果。以您的示例为例:

选择  名称p.PrizeName 从  dbo。[用户] 交叉加入奖p

这将返回:

鲍勃iphone 5 爱丽丝iPhone 5 鲍勃·iPhone 6 爱丽丝iphone 6

A Screen Capture of the result set

答案 3 :(得分:0)

使用CROSS JOIN

select u.username, p.prize
from users u cross join
     prizes p;

我用复数形式命名表,因为它们包含多个实体实例(并且复数与关键字冲突的可能性较小)。

如果要“分配”它们,则可能需要连接表。为此,您通常需要具有ID并执行以下操作:

insert into user_prizes (user_id, prize_id)
    select u.user_id, p.prize_id
    from users u cross join
         prizes p;

答案 4 :(得分:0)

INSERT INTO table_User_Prizes
           (Username, PrizeName)
SELECT Table_User.Username,table_Prize.PrizeName
FROM Table_User,table_Prize

请注意,如果“ table_User_Prizes”具有更多列,则将它们填充为NULL。