Have you tried something like this:
UPDATE table1
SET
name = (SELECT t2.name
FROM table1 T2
WHERE t2.name is not null
and t2.empid - table1.empid),
city = (SELECT t3.city
FROM table1 T3
WHERE t3.city is not null
and t3.empid - table1.empid)
WHERE
name is null
and city is null
--Update--
Doh!!!
onedaywhen is right. You can't use a select in an update (in MS Access).
The ultimate solution appears to be to take this down into VBA, open up a recordset of the null names/cities, and a recordset of the the non-null names/cities. Then walk the two record sets, updating the null records appropriately. It will look something like this:
' Note: Typed, but not tested (kind of like dictated buy not read)
' Note: No real error handling has been included in this code
' Note: This has not been optimised and is likely bigger than O(n)
Dim db As Database
Dim rst As Recordset
Dim rst2 As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("select blah blah blah", _
dbOpenDynaset, _
dbSeeChanges)
If (Not rst.BOF) Then
rst.MoveFirst
End If
while (not rst.eof)
Set rst2 = db.OpenRecordset("select blah blah where empid = " & _
rst("empid"), _
dbOpenDynaset, _
dbSeeChanges)
If (Not rst2.BOF) Then
rst2.MoveFirst
End If
if (not rst2.eof) then ' we only need the first one we find
rst.edit
rst("fieldname1") = rst2("fieldname1")
rst("fieldname2") = rst2("fieldname2")
rst.update
end if
rst.movenext
wend
rst.close
set rst = nothing
(btw., naming a column name
can cause you a big pain in the butt later on; I'd consider renaming it empName)