Tsql 查找链接表中缺少的条目
我使用SQL Server 2008,并有以下表格 使用者 物体 objectid | category 9 | A 8 | B 7 | A 6 | C 用户对象 userid | objectid 1 | 9 3 | 7 3 | 6 如您所见,userobjects是一个链接表。不幸的是,它缺少一些条目。我可以在脚本中包含它们,但我想知道sql中是否有解决方案 对于属于类别“A”的每个userid和每个objectid,userobjects中应该有一个条目。所以我想要的是: userid | objectid 1 | 9 1 | 7 2 | 9 2 | 7 3 | 9 3 | 7 3 | 6 我可以在脚本中包含它们,但我想知道是否有解决方案 在sql中 这是一个使用UNION的select查询Tsql 查找链接表中缺少的条目,tsql,Tsql,我使用SQL Server 2008,并有以下表格 使用者 物体 objectid | category 9 | A 8 | B 7 | A 6 | C 用户对象 userid | objectid 1 | 9 3 | 7 3 | 6 如您所见,userobjects是一个链接表。不幸的是,它缺少一些条目。我可以在脚本中包含它们,但我想知道sql中是否有解决方案 对于属于类别“A”的每个userid和每个obj
使用对象的左连接和非传统内部连接,无需联合即可完成此操作
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
< P> < /P> + 1,但您可能需要考虑使用UNIAL-ALL,因为第一组被保证不包含第二个集合。set@ConradFrix:谢谢您的评论&+1。我不明白你的意思。通常,UNION用于不同的记录,UNION ALL带来所有记录。但是应用到这个查询并没有什么区别,因为两个查询是作为一个“A”和“A”过滤器彼此排斥的。如果你在不同的问题上写了这个问题,从Actudio中选择不同的ApimiMyKieldfield,我会写下你想考虑的注释,因为ApimiMyKielfield保证是唯一的。因此,出于同样的原因,使用UNIONALL更好,删除不必要的DISTINCT更好。
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
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