【发布时间】:2010-04-22 20:48:35
【问题描述】:
我有两个具有以下定义的表
TableA TableB
ID1 ID2 ID3 Value1 Value ID1 Value1
C1 P1 S1 S1
C1 P1 S2 S2
C1 P1 S3 S3
C1 P1 S5 S4
S5
这些值只是表中的示例。 TableA 有一个聚集的主键 ID1、ID2 和 ID3,而 TableB 有 p.k。 ID1 我需要根据 TableB 创建一个 TableA 中缺少记录的表 我尝试创建的选择查询应提供以下输出
C1 P1 S4
为此,我有以下 SQL 查询
SELECT
DISTINCT TableA.ID1, TableA.ID2, TableB.ID1
FROM TableA a, TableB b
WHERE TableB.ID1 NOT IN
(
SELECT DISTINCT [ID3]
FROM TableA aa
WHERE a.ID1 == aa.ID1
AND a.ID2 == aa.ID2
)
虽然这个查询有效,但它的性能很差,我的最终 TableA 可能有多达 1M 条记录。 有没有办法更有效地重写它。
感谢您的帮助, 贾维德
【问题讨论】:
-
Value1和Value的目的是什么? -
我从您的标签中假设您使用的是 SQL Server 2005?您可以发布包括索引在内的完整表定义吗?
-
值 1 和值 2 是不是主键列的列。这些值用于其他查询。对于 TableA,聚集的主键是 ID1、ID2 和 ID3,对于 TableB,唯一的主键是 ID1
-
== 在 SQL Server 中不起作用。此外,您应该学习如何实际使用连接,并且永远不要再次使用该隐式连接。它们的编程技术很差,容易出错并且已经过时了 18 年。
标签: sql sql-server-2005 performance