SQL的乐趣之一在于完成同样的事情通常有多种方法,那么哪种方法最好呢?在这种情况下,我正在将记录从'Import'表中插入,并给它们全部设置默认的安全级别为'Viewer'(在不同的数据库中可能有不同的关键ID)。我可以用至少三种不同的方法来实现这个目标(也许还有更多): CROSS JOIN、CROSS APPLY和INNER JOIN。任何关于性能或设计目的上的建议都可以吗?我倾向于使用Cross Apply。
可能已经回答了这个问题,但是我找不到答案,而且最近我在开发中一直遇到这个需求,所以我可能会学习最好的方法。
下面是3个示例语句,请问哪种JOIN SecRole表的方式最好?
可能已经回答了这个问题,但是我找不到答案,而且最近我在开发中一直遇到这个需求,所以我可能会学习最好的方法。
下面是3个示例语句,请问哪种JOIN SecRole表的方式最好?
INSERT INTO LocStaff (LocationID, StaffID, SecRoleID)
SELECT i.LocationID, s.StaffID, sr.SecRoleID
FROM IntStaff i
JOIN Staff s ON i.EmployeeID = s.StaffNumber
CROSS JOIN SecRole sr
WHERE sr.Name = 'Viewer'
INSERT INTO LocStaff (LocationID, StaffID, SecRoleID)
SELECT i.LocationID, s.StaffID, sr.SecRoleID
FROM IntStaff i
JOIN Staff s ON i.EmployeeID = s.StaffNumber
JOIN SecRole sr ON sr.Name = 'Viewer'
INSERT INTO LocStaff (LocationID, StaffID, SecRoleID)
SELECT i.LocationID, s.StaffID, sr.SecRoleID
FROM IntStaff i
JOIN Staff s ON i.EmployeeID = s.StaffNumber
CROSS APPLY (SELECT TOP 1 SecRoleID FROM SecRole WHERE Name = 'Viewer') sr
SecRoleID
与你的查询的其余部分没有关系。 - SqlZim