我使用SQL-Server 2008并拥有以下表格。
用户
userid 1 2 3
物体
objectid | category 9 | A 8 | B 7 | A 6 | C
userobjects
userid | objectid 1 | 9 3 | 7 3 | 6
如您所见,userobjects是一个链接表。不幸的是它遗漏了一些条目。我可以用脚本包含它们,但我想知道sql中是否有解决方案。
对于每个userid和属于“A”类的每个objectid,应该在userobjects中有一个条目。所以我想拥有的是:
userid | objectid 1 | 9 1 | 7 2 | 9 2 | 7 3 | 9 3 | 7 3 | 6
答案 0 :(得分:1)
我可以用脚本包含它们,但我想知道是否有解决方案 在sql。
这是使用UNION
的选择查询(此处为SQL-DEMO);
select u.userId, o.objectId
from objects o cross join users u
where o.category = 'A'
union
select u.userId, o.objectId
from users u join userobjects uj on u.userid = uj.userId
join objects o on uj.objectid = o.objectid
where o.category <> 'A'
order by u.userid,o.objectid desc
--RESULTS
userId objectId
1 9
1 7
2 9
2 7
3 9
3 7
3 6
答案 1 :(得分:0)
你可以在没有UNION的情况下使用LEFT连接和非传统的INNER JOIN来实现对象
SELECT DISTINCT u.userid,
o.objectid
FROM users u
LEFT JOIN userobjects uj
ON u.userid = uj.userid
INNER JOIN objects o
ON uj.objectid = o.objectid
OR ( o.category = 'A' )
ORDER BY u.userid,
o.objectid DESC