1

谁能告诉我如何为以下查询编写删除语句:

      SELECT     a.UserID, b.UserEmailAddress
      FROM  tblUserProgramme AS a LEFT OUTER JOIN

      tblUser AS b ON b.UserID = a.UserID LEFT OUTER JOIN
      tblWorkGroup AS c ON c.WorkGroupID = b.WorkGroupID

      WHERE(a.ProgrammeID = 59) AND (a.UserID NOT IN

          (SELECT     UserID FROM tblUser AS a WHERE (WorkGroupID IN
             (SELECT     WorkGroupID FROM tblWorkGroup WHERE                          
             (WorkGroupName  LIKE  '%Insight%') OR (WorkGroupName LIKE '%Other%'))))) 

      AND (b.UserEmailAddress NOT IN
            (SELECT     email FROM          tmpUsers))

      ORDER BY b.UserEmailAddress

服务器是 SQL Server 2005

4

4 回答 4

4

查询将是

Delete from 

 ( 
 SELECT     a.UserID, b.UserEmailAddress
  FROM  tblUserProgramme AS a LEFT OUTER JOIN
  tblUser AS b ON b.UserID = a.UserID LEFT OUTER JOIN
  tblWorkGroup AS c ON c.WorkGroupID = b.WorkGroupID
  WHERE(a.ProgrammeID = 59) AND (a.UserID NOT IN
(SELECT     UserID FROM tblUser AS a WHERE (WorkGroupID IN
(SELECT     WorkGroupID FROM tblWorkGroup WHERE (WorkGroupName  LIKE           
'%Insight%') OR (WorkGroupName LIKE '%Other%'))))) AND (b.UserEmailAddress NOT IN
(SELECT     email FROM          tmpUsers))
ORDER BY b.UserEmailAddress
) a
于 2012-09-06T09:44:35.073 回答
3

语法是特定于数据库的..
对于大多数 tha 数据库,如果您想从 tblUserProgramme 中删除,这应该可以工作

DELETE A
FROM tblUserProgramme AS a 
 .....
于 2012-09-06T09:38:50.197 回答
2

Thank you all for your quick answers:) There were a quite a few answers right, but had to pick the first one:)

As Joe G Joseph has mentioned, this is what i did

DELETE a
from dbo.tblUserProgramme a
LEFT OUTER JOIN tblUser b ON b.UserID = a.UserID
LEFT OUTER JOIN tblWorkGroup c ON c.WorkGroupID = b.WorkGroupID
where a.ProgrammeID = 59 AND 
a.UserID  NOT IN (SELECT UserID  FROM tblUser a WHERE a.WorkGroupID IN
(SELECT WorkGroupID FROM tblWorkGroup
WHERE WorkGroupName like '%Insight%' OR WorkGroupName like '%Other%')) 
 AND b.UserEmailAddress NOT IN(SELECT email FROM tmpUsers)
于 2012-09-06T09:54:55.730 回答
2

通常,在 SQL Server 中,您可以删除与给定 SQL 查询匹配的所有记录,如下所示,前提是您的 SELECT 仅返回单个表中的列:

DELETE x
FROM
(
   -- Any query which returns data from a single table, that you wish to delete
) x;

或者,使用 CTE:

;WITH x as 
(
   -- Any query which returns data from a single table, that you wish to delete
)
DELETE x;
于 2012-09-06T09:50:51.720 回答