2012-09-06 105 views
1

谁能告诉我怎么写一个删除语句下面的查询:DELETE语句SQL连接

 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中

+0

哪个数据库? SQL服务器,MySQL? –

+0

已编辑该问题 – rosebrit3

+0

令人困惑......请问您能否补充一点细节? –

回答

3

语法是DB具体..
对于大多数塔数据库这应该工作,如果你想从tblUserProgramme

删除
DELETE A 
FROM tblUserProgramme AS a 
..... 
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 
2

在一般情况下,在SQL Server中,你可以删除如下匹配给定的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; 
+0

但当然OP有多个表,所以我的答案是不适用。 – StuartLC

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)