删除语句SQL连接

时间:2012-09-06 09:35:50

标签: sql sql-server join

任何人都可以告诉我如何为以下查询编写删除语句:

      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

SERVER是SQL Server 2005

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

语法是特定于DB的。
对于大多数数据库,这应该有用,如果你想从tblUser程序中删除

答案 2 :(得分:2)

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

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;

答案 3 :(得分:2)

谢谢大家的快速回答:)有很多答案,但必须选择第一个:)

正如Joe G Joseph所说, 这就是我做的事情

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)