表A
ID MatchID1 MatchID2
1 1002 120
3 1003 141
5 1006 150
6 1008 140
表B
ID MatchID1 MatchID2 Status
1 1002 120
2 1002 120
3 1002 120
4 1003 200
5 1006 150
6 1008 150
7 1008 140
如果符合以下情况,我想用'FAIL'填充TableB col = status 来自tableB的其MatchID1的所有matchID2不等于tableA中其对应的MAatchID1的matchID2 在这种情况下,tableB:120对应于1002,对于tableA也是如此,因此不会失败。 预期结果:
ID MatchID1 MatchID2 Status
1 1002 120 NULL
2 1002 120 NULL
3 1002 120 NULL
4 1003 200 FAIL
5 1006 150 NULL
6 1008 150 FAIL
7 1008 140 FAIL
注意: 如果即使一个记录(match02)不匹配,也会失败match01的整个集合。比如表B中的id 6和7。提前谢谢。
答案 0 :(得分:1)
UPDATE a
SET Status = 'FAIL'
FROM TableA a
INNER JOIN (
SELECT a.MatchID1
FROM TableA a
INNER JOIN b ON a.MatchID1 = b.MatchID1 AND a.MatchID2 <> b.MatchID2
GROUP BY a.MatchID1
) x ON a.MatchID1 = x.MatchID1
答案 1 :(得分:1)
update B
set status = 'FAIL'
From tableB B
INNER JOIN (SELECT B.matchID1 FROM TableB B
GROUP BY B.matchID1
HAVING MAX(matchID1)<> MIN(MatchID2)) B1
ON B.matchid1 = B1.MatchID1
UPDATE B
SET Status = 'FAIL'
FROM TableB B
INNER JOIN TableA A
ON A.MatchID1 = B.matchID1
WHERE A.matchID2 <> B.matchID2
答案 2 :(得分:0)
我认为您正在通过加入寻找更新。试试这个;
UPDATE TableB
SET TableB.Status = CASE WHEN TableA.ID IS NULL THEN 'FAIL' ELSE NULL END
FROM TableB
LEFT JOIN TableA
ON TableB.MatchID1 = TableA.MatchID1
AND TableB.MatchID2 = TableA.MatchID2
您没有说明您使用的是哪种RDBMS,以上是针对SQL Server的。
答案 3 :(得分:0)
建议将你的努力分解成更小的块。
似乎你需要几件事:
一个小查询,只获取第一个表中有或没有不同匹配号的行。写下来。
一个小查询,用于查找第一个表中是否找到第二个表中的匹配号。写下来。
根据前两个查询设置值的更新。
HTH