[英]SQL Server query delete results of a join from a table
我不是SQL Server专家,并且正在为此查询苦苦挣扎。 有人可以帮忙吗?
DELETE
FROM PPTMAILLISTC.dbo.emailTables
WHERE email IN (SELECT *
FROM PPTMAILLISTC.dbo.emailTables tab1
INNER JOIN PPTMAILLISTAB.dbo.emailTables tab2
ON tab1.email = tab2.email)
SQL Server Management Studio返回。
消息116,第16级,状态1,第1行
如果未使用EXISTS引入子查询,则只能在选择列表中指定一个表达式。
基本上,有2个单独的表都称为相同的( dbo.emailTables
)在2个独立的数据库( PPTMAILLISTC
和PPTMAILLISTAB
)。
这两个数据库的结果相同(我可以使用连接ie找出这些结果)
SELECT *
FROM PPTMAILLISTC.dbo.emailTables tab1
INNER JOIN PPTMAILLISTAB.dbo.emailTables tab2
ON tab1.email = tab2.email
我想从PPTMAILLISTC.dbo.emailTables
删除此PPTMAILLISTC.dbo.emailTables
的结果。
您可以摆脱对IN的使用,只需使用内部的SELECT语句并将其转换为DELETE即可,而仅引用实际上要影响的表的ALIAS(tab1),如下所示:
DELETE tab1
FROM PPTMAILLISTC.dbo.emailTables tab1
INNER JOIN PPTMAILLISTAB.dbo.emailTables tab2 ON tab1.email = tab2.email
您需要这样的东西:
DELETE FROM PPTMAILLISTC.dbo.emailTables
WHERE email IN (SELECT tab1.email
FROM PPTMAILLISTC.dbo.emailTables tab1 INNER JOIN
PPTMAILLISTAB.dbo.emailTables tab2
ON tab1.email = tab2.email
);
即使两个表都只有一列, *
将解析为两列tab1.email
和tab2.email
。 如错误消息所述, in
子查询的select
列表只能具有一列。
编辑:
这实际上更简单地写为:
DELETE FROM PPTMAILLISTC.dbo.emailTables
WHERE email IN (SELECT tab2.email
FROM PPTMAILLISTAB.dbo.emailTables tab2
);
您不需要在in
子查询in
联接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.