用于更新字段的sql查询

z31licg0  于 2021-08-09  发布在  Java
关注(0)|答案(4)|浏览(368)

我们有两张table:

  1. parents ( id:int , name:string , large_family:boolean default false)
  2. children (id:int , name:string , parent_id: foreign key to parents)

如果父级有两个以上的子级,我需要一个sql查询来将parents表中的“large\u family”字段更新为“true”。

czq61nw1

czq61nw11#

  1. UPDATE parents
  2. SET large_family = CASE
  3. WHEN (SELECT COUNT(*) FROM children WHERE parent_id = parents.id) > 2 THEN 1
  4. ELSE 0
  5. END
w7t8yxp5

w7t8yxp52#

这是我的经验:对于大多数update查询,我编写它的select查询,然后将其更改为update。这样做非常简单。

  1. update p set large_family="true"
  2. from
  3. parents p
  4. inner join chidren c
  5. on(p.id = c.parent_id)
  6. group by p.parent_id
  7. having count(c.id)>2
pkmbmrz7

pkmbmrz73#

加入表格 parents 返回所有 parent_id 有两个以上孩子的:

  1. update parents p
  2. inner join (
  3. select parent_id
  4. from children
  5. group by parent_id
  6. having count(*) > 2
  7. ) t on t.parent_id = p.id
  8. set p.large_family = true

这种语法适用于mysql。

6ojccjat

6ojccjat4#

  1. UPDATE parents
  2. SET large_family = (SELECT CASE
  3. WHEN childcnt > 1 THEN 1
  4. ELSE 0
  5. END
  6. FROM (SELECT parent_id,
  7. Count(*) CHILDCNT
  8. FROM children
  9. WHERE parents.id = children.parent_id
  10. GROUP BY parent_id))
  11. WHERE EXISTS (SELECT 1
  12. FROM children
  13. WHERE parents.id = children.parent_id);

相关问题