将两个或多个表作为输出的 SQL JOIN - 最有效的方法?

标签 sql sql-server tsql

我有一个 SQL 查询,它在另一个表上执行 LEFT JOIN,然后输出所有可以耦合到指定表中的结果。然后我有第二个 SQL 查询再次执行 LEFT JOIN,然后输出无法耦合到指定表的结果。在代码中,这类似于:

INSERT INTO coupledrecords
SELECT b.col1, b.col2... s.col1, s.col2... FROM bigtable AS b
LEFT JOIN smallertable AS s
ON criterium
WHERE s.col1 IS NOT NULL

INSERT INTO notcoupledrecords
SELECT b.col1, b.col2... bigtable AS b
LEFT JOIN smallertable AS s
ON criterium
WHERE s.col1 IS NULL

我的问题:我现在必须执行 JOIN 两次,才能实现我想要的。我有一种感觉,这比它可能的速度慢了一倍。这是真的吗?如果是,是否有更有效的方法?

最佳答案

如果您要将不同的结果插入到 2 个不同的表中,您将需要 2 个不同的查询。

我唯一建议的是,“coupledrecords”查询可以只是一个 INNER JOIN:

INSERT INTO coupledrecords
SELECT b.col1, b.col2... s.col1, s.col2... FROM bigtable AS b
INNER JOIN smallertable AS s 
ON criterium

如果您要插入到同一个表中,并使用一个字段来指示它是否是一条匹配的记录,那么是的,您可以将其作为一个查询来完成。

关于将两个或多个表作为输出的 SQL JOIN - 最有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2779526/

相关文章:

函数的sql连接

sql - SQL Server 中的父子关系

sql-server - 需要一些 DateDiff 计算从星期一开始的一周

sql - 递归 CTE 未获得预期结果。如何仅分配 anchor ?

sql - 如何修改此查询以仅获取字段值不为 0 的最后一条记录?

sql - 基于 sysdate 的事件

mysql - 如何统计 MySQL 中所有满足条件的不同值?

sql-server - 避免在 WHERE 子句中引用表两次

sql - 从表中选择行并检查 sql 中列的条件