gpt4 book ai didi

sql - 内连接 vs 交叉连接 vs 交叉应用

转载 作者:行者123 更新时间:2023-12-03 17:05:30 26 4
gpt4 key购买 nike

SQL 的一大乐趣是通常有多种方法可以做同样的事情,那么哪一种是“最好的”呢?

在这种情况下,我从“导入”表中插入记录,并为它们全部提供“查看器”的默认安全级别(在不同的数据库中可能有不同的 key ID)。我可以通过至少三种不同的方式(甚至可能更多)做到这一点:CROSS JOIN、CROSS APPLY 和 INNER JOIN。关于哪个最适合性能或设计目的的任何建议?我倾向于交叉申请。

这个问题可能已经有答案了,但是一直找不到,最近在开发中不断遇到这个需求,不妨学习一下最好的方法。

以下是 3 个示例语句。加入 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

最佳答案

前两个是等价的。在这种情况下,是使用内部联接还是交叉联接实际上是一个偏好问题。我想我通常会使用 cross join ,因为表之间没有真正的连接条件。

注意:你永远不应该使用 cross join当意图是“真实的”时 inner join表之间具有匹配条件。
cross apply不是在做同样的事情。它只选择一行。如果您的意图是最多获得一个匹配的行,则使用 cross apply .如果目的是获得一个匹配的行,则使用 outer apply .

关于sql - 内连接 vs 交叉连接 vs 交叉应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42587081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com