2015-11-10 2 views
1

Как показано на рисунке, у меня есть четыре таблицы. Только TableB и TableBChild имеют отношение внешних ключей.Обновление SQL на основе значения из другой таблицы

То, что я хочу добиться здесь, чтобы определить, является ли TableBChild.MemberID матчей TableA.memberNo где TableB.isgood является истинным

Если не пакетное обновление isvalid лжи, где условие не удовлетворяют.

Но я не могу сравнить TableBChild.MemberID с Member.MemberNo.

Update TableB 
 
Set IsValid = 0 
 
From TableA as A 
 
INNER JOIN TableB as B ON A.TableBNo = B.TableBNo And IsGood = 1 
 
INNER JOIN TableBChild as BC ON B.TableBID = BC.TableBID 
 
          AND BC.MEMBERID != SELECT MemberID 
 
               FROM Member 
 
               WHERE MemberNo = A.MemberNo // This line is not working

enter image description here

ответ

2

Попробуйте использовать NOT IN вместо != так:

Update TableB 
Set IsValid = 0 
From TableA as A INNER JOIN TableB as B 
         ON A.TableBNo = B.TableBNo And IsGood = 1 
       INNER JOIN TableBChild as BC 
         ON B.TableBID = BC.TableBID 
AND BC.MEMBERID NOT IN (SELECT MemberID from Member Where MemberNo = A.MemberNo) 
0

Изменение вашей последней строки:

AND BC.MEMBERID != (SELECT MemberID from Member Where MemberNo = A.MemberNo) 
+0

Это '()' ничего не изменит! –

0

Что бы я сделал:

UPDATE TableB 
SET IsValid = 0 
WHERE TableBID NOT IN 
(
-- this will select TableBID's satisfying: 
-- TableB.IsGood is true, 
-- and corresponding TableBChild has memberID that exists in TableA.MemberNo 
SELECT tbc.TableBID 
FROM TableBChild tbc 
INNER JOIN TableB tb ON tb.TableBID = tbc.TableBID 
INNER JOIN TableA ta ON tbc.MemberID = ta.MemberNo 
WHERE tb.IsGood = 1 
)