0

我正在尝试使用 SELECT 查询从表变量中删除一些数据。以下代码完美运行:

DECLARE @sgID int
SET @sgID = 1234

DELETE FROM
    @tbl_users 
WHERE
    (userID NOT IN (
            SELECT
                userID 
            FROM
                [SGTable] 
            WHERE
                (sgID = @sgID)
            ))

我正在尝试加快此查询,并阅读以下方法可能会更好。但是,当我使用以下代码时 - 所有记录都从表变量中删除。

DELETE
    tmp 
FROM 
    @tbl_Users tmp INNER JOIN
    [SGTable] sgu ON sgu.userID = tmp.userID 
WHERE
    (sgu.sgID <> @sgID)

我(显然错误地)假设这两个查询做了同样的事情(删除表变量中的所有用户 ID,其中在子查询中找不到用户 ID)。谁能提供一些关于使第二个查询工作的建议,因为它显然更容易阅读和维护?

4

3 回答 3

1

一个 userID 是否可以与 SGTable 中的多个 sgID 相关联?

如果是这样,那么您将删除 sgID (@sgID) 中的用户,因为它们也与另一个 sgID 相关联。

您可能更喜欢:

DELETE tmp 
FROM @tbl_Users tmp 
LEFT OUTER JOIN [SGTable] sgu ON sgu.userID = tmp.userID AND sgu.sgID = @sgID
WHERE sgu.sgID IS NULL
于 2013-01-03T19:51:11.333 回答
0

那 where 子句不应该是 "=" 而不是 "<>" 吗?您想删除匹配的记录,而不是不匹配的记录(可能是所有记录),对吗?

于 2013-01-03T19:49:06.237 回答
0

怎么样delete where exists

DELETE FROM mytable
WHERE EXISTS (
    SELECT *
    FROM ....)
;
于 2013-01-03T19:47:22.120 回答