SQL:基于其他表更新列
表 表BSQL:基于其他表更新列,sql,sql-update,Sql,Sql Update,表 表B ID MatchID1 MatchID2 1 1002 120 3 1003 141 5 1006 150 6 1008 140 如果出现以下情况,我想用“失败”填充TableB col=status: 表B中MatchID1的所有matchID2不等于表A中相应MAatchID1的matchID2 在这种情况下,表B:120对应于1002,表A也是如此,因此不会失败。 预期结果: ID MatchID1 MatchID2 Status 1
ID MatchID1 MatchID2
1 1002 120
3 1003 141
5 1006 150
6 1008 140
如果出现以下情况,我想用“失败”填充TableB col=status:
表B中MatchID1的所有matchID2不等于表A中相应MAatchID1的matchID2
在这种情况下,表B:120对应于1002,表A也是如此,因此不会失败。
预期结果:
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
注:
如果一条记录Match02不匹配,则使match01的整个集合失败。如表B中的id 6和7。提前感谢。我想您正在通过加入寻找更新。试试这个
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
您没有说您使用的是哪种RDBMS,上面是针对SQL Server的。重新阅读。。还是不知道你问了什么 建议把你的努力分成小块 看来你需要几样东西: 一个小查询,仅从第一个表中获取具有或不具有不同匹配号的行。写下来 一个小查询,用于查找是否在第一个表中找到第二个表中的匹配号。写下来 基于前两个查询设置值的更新
hth如果您使用oracle,只需一个过程即可完成。仅使用SQL,我不能保证您能做到这一点。
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
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
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