我知道基本的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')
感谢任何帮助。
答案 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%'