说我有两张桌子。
因此B中的每个id都可以在A中有很多记录。
现在我的问题是,当表A中具有相同parent_id_B的所有子条目具有A_status = 1时,我需要将B_status设置为1,否则设置B_status = 2
例如:
Table A:
id A_status parent_id_B
1 1 1
2 1 1
3 1 2
4 1 3
5 1 3
Table B:
id B_status
1 0
2 0
3 0
Expected result:
Table B:
id B_status
1 1
2 1
3 1
现在考虑另一种情况
Table A:
id A_status parent_id_B
1 1 1
2 1 1
3 2 2
4 2 3
5 1 3
Table B:
id B_status
1 0
2 0
3 0
Expected result:
Table B:
id B_status
1 1
2 2
3 2
我需要这个才能在sqlite上工作。感谢
答案 0 :(得分:3)
我相信这可以这样做:
UPDATE TableB
SET B_Status =
(SELECT MAX(A_Status) FROM TableA WHERE TableA.Parent_ID_B = TableB.ID);
SqlFiddle with your second case here
在更一般的情况下(不依赖于A状态的直接映射,您还可以在映射中使用CASE ... WHEN
:
UPDATE TableB
SET B_Status =
CASE WHEN (SELECT MAX(A_Status)
FROM TableA
WHERE TableA.Parent_ID_B = TableB.ID) = 1
THEN 1
ELSE 2
END;
修改(如果状态超过原始状态数):
我相信你需要确定每行的2个事实,例如
这是第一个选项:
UPDATE TableB
SET B_Status =
CASE WHEN
EXISTS
(SELECT 1
FROM TableA
WHERE TableA.Parent_ID_B = TableB.ID
AND TableA.A_Status <> 1)
OR NOT EXISTS(SELECT 1
FROM TableA
WHERE TableA.Parent_ID_B = TableB.ID)
THEN 2
ELSE 1
END;