更新表使用从一个表记录中选择不会'存在于另一个

时间:2014-10-14 20:05:18

标签: sql sql-server-2008 subquery

我知道基本的SQL,但并不复杂。

我有两张桌子[表1和表1]表2]两者中都有用户名和memberid。表1中有记录,表2中没有记录。

对于前。如果我需要从表1中提取表2中没有匹配记录的所有记录,使用用户名作为过滤器,我会写这样的内容:

select * from Table1 a
  where  not exists (select * from Table2 b 
                 where b.MemberID = a.MemberID) and UserName like 'b%'

这很容易。但是,如何使用其他用户名更新所有这些结果?

我试图在Table1中找到表2中没有匹配记录的相同用户名的所有记录,然后使用我的用户名更新这些记录(' r%& #39;)

我知道有些人会问,你有什么尝试...我试图将2个查询作为单个查询使用,但是出现了很多错误......对于ex:

update Table1
   set UserName = (select * from Table1 a
   where  not exists (select * from Table2 b 
     where b.MemberID = a.MemberID) and UserName = 'r@gmail.com') 

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

这应该更新Table1中与您的第一个查询匹配的行。

update Table1
set UserName = 'r@gmail.com'
from (select * from Table1 a
where  not exists (select * from Table2 b 
             where b.MemberID = a.MemberID) and UserName like 'b%')

答案 1 :(得分:1)

使用SQL 2008及更高版本,您可以使用MERGE命令根据另一个表的内容对一个表进行复杂的更改。

MERGE INTO Table2 AS Target
USING Table1 AS Source ON Source.MemberID = Target.MemberID AND Source.UserName = Target.UserName
WHEN MATCHED THEN
    UPDATE Target SET [ExtraField] = Source.[SourceField]
WHEN NOT MATCHED THEN
    INSERT INTO Target(MemberID, UserName,ExtraField) VALUES (Source.MemberID, Source.UserName, Source.SourceField)

答案 2 :(得分:1)

试试这个

UPDATE TAB1
SET    USERNAME = (SELECT TOP 1 USERNAME
                   FROM   TABLE1 A
                   WHERE  USERNAME LIKE 'r%')
FROM   TABLE1 TAB1
WHERE  NOT EXISTS (SELECT 1
                   FROM   TABLE2 B
                   WHERE  B.MEMBERID = TAB1.MEMBERID)
       AND TAB1.UserName LIKE 'b%'