如何基于聚合查询更新一个表从另一张表

阿南德

说我有两个桌子。

表A

  • ID
  • 状态
  • parent_id_B

表B

  • ID
  • B_状态

因此,对于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上工作。谢谢

斯图尔特

我相信可以这样做:

UPDATE TableB
SET B_Status = 
(SELECT MAX(A_Status) FROM TableA WHERE TableA.Parent_ID_B = TableB.ID);

SqlFiddle与您的第二种情况在这里

在更一般的情况下(不依赖于A状态的直接映射,您还可以CASE ... WHEN在映射中使用a

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个事实,例如

  • 表A中是否存在任何行,每个行的状态都不为1
  • 同一B至少必须有一行
  • 或者,状态1中A的行数是否等于B中A的所有行数。

这是第一个选择:

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;

更新小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何基于一个列将列添加到另一张表?

来自分类Dev

如何根据另一张表的值查询一张表?

来自分类Dev

使用触发器使用参数更新另一张表的列时,更新一个表的列

来自分类Dev

使用一个表中的逗号分隔列表作为子句查询另一张表

来自分类Dev

根据两列相等与另一张表中的两列相等来更新一个SQL表

来自分类Dev

一张表的值基于另一张表

来自分类Dev

如何基于另一个表列更新表?

来自分类Dev

使用一张表中的数据查询另一张表

来自分类Dev

从一个表中获取价值并将其用于另一张表

来自分类Dev

创建表时,从另一张表中选择一个列

来自分类Dev

使用另一张表的数据更新一张表的记录

来自分类Dev

查询以从一个表中获取一个条件的总和,然后将其添加到另一张表中的相同条件中

来自分类Dev

参考同一张表上的另一个字段更新表中的一个字段Oracle

来自分类Dev

如何使用laravel从一张表复制到另一张表?

来自分类Dev

如何使用条件更新表中的行,请参考另一张表

来自分类Dev

SQL查询以在一个表中搜索一条记录,并将其替换为另一张表中的多条记录

来自分类Dev

MySql LEFT JOIN从另一张表仅返回一个NULL行

来自分类Dev

两列引用另一张表中的一个ID

来自分类Dev

MySQL将单元格从一张表更新到另一张

来自分类Dev

用一个表的列名和另一张表的列值联接不同的表

来自分类Dev

用一个表的列名和另一张表的列值联接不同的表

来自分类Dev

如何使用SQL SELECT基于另一个表中的特定行查询表

来自分类Dev

如何从一个表中选择一条记录并计算出现在另一张表中的数目并对其进行计数

来自分类Dev

Excel使用基于一个单元格的另一张工作表中的信息填充相应的单元格

来自分类Dev

如何基于外部表更新另一个表

来自分类Dev

如何基于另一个表多次更新表

来自分类Dev

mysql:如何查询一张表中的比例

来自分类Dev

多次查询同一张表

来自分类Dev

多次查询同一张表

Related 相关文章

  1. 1

    如何基于一个列将列添加到另一张表?

  2. 2

    如何根据另一张表的值查询一张表?

  3. 3

    使用触发器使用参数更新另一张表的列时,更新一个表的列

  4. 4

    使用一个表中的逗号分隔列表作为子句查询另一张表

  5. 5

    根据两列相等与另一张表中的两列相等来更新一个SQL表

  6. 6

    一张表的值基于另一张表

  7. 7

    如何基于另一个表列更新表?

  8. 8

    使用一张表中的数据查询另一张表

  9. 9

    从一个表中获取价值并将其用于另一张表

  10. 10

    创建表时,从另一张表中选择一个列

  11. 11

    使用另一张表的数据更新一张表的记录

  12. 12

    查询以从一个表中获取一个条件的总和,然后将其添加到另一张表中的相同条件中

  13. 13

    参考同一张表上的另一个字段更新表中的一个字段Oracle

  14. 14

    如何使用laravel从一张表复制到另一张表?

  15. 15

    如何使用条件更新表中的行,请参考另一张表

  16. 16

    SQL查询以在一个表中搜索一条记录,并将其替换为另一张表中的多条记录

  17. 17

    MySql LEFT JOIN从另一张表仅返回一个NULL行

  18. 18

    两列引用另一张表中的一个ID

  19. 19

    MySQL将单元格从一张表更新到另一张

  20. 20

    用一个表的列名和另一张表的列值联接不同的表

  21. 21

    用一个表的列名和另一张表的列值联接不同的表

  22. 22

    如何使用SQL SELECT基于另一个表中的特定行查询表

  23. 23

    如何从一个表中选择一条记录并计算出现在另一张表中的数目并对其进行计数

  24. 24

    Excel使用基于一个单元格的另一张工作表中的信息填充相应的单元格

  25. 25

    如何基于外部表更新另一个表

  26. 26

    如何基于另一个表多次更新表

  27. 27

    mysql:如何查询一张表中的比例

  28. 28

    多次查询同一张表

  29. 29

    多次查询同一张表

热门标签

归档