我们有两张table:
parents ( id:int , name:string , large_family:boolean default false) children (id:int , name:string , parent_id: foreign key to parents)
parents ( id:int , name:string , large_family:boolean default false)
children (id:int , name:string , parent_id: foreign key to parents)
如果父级有两个以上的子级,我需要一个sql查询来将parents表中的“large\u family”字段更新为“true”。
czq61nw11#
UPDATE parents SET large_family = CASE WHEN (SELECT COUNT(*) FROM children WHERE parent_id = parents.id) > 2 THEN 1 ELSE 0 END
UPDATE parents
SET large_family = CASE
WHEN (SELECT COUNT(*) FROM children WHERE parent_id = parents.id) > 2 THEN 1
ELSE 0
END
w7t8yxp52#
这是我的经验:对于大多数update查询,我编写它的select查询,然后将其更改为update。这样做非常简单。
update p set large_family="true"fromparents pinner join chidren con(p.id = c.parent_id)group by p.parent_idhaving count(c.id)>2
update p set large_family="true"
from
parents p
inner join chidren c
on(p.id = c.parent_id)
group by p.parent_id
having count(c.id)>2
pkmbmrz73#
加入表格 parents 返回所有 parent_id 有两个以上孩子的:
parents
parent_id
update parents pinner join ( select parent_id from children group by parent_id having count(*) > 2) t on t.parent_id = p.idset p.large_family = true
update parents p
inner join (
select parent_id
from children
group by parent_id
having count(*) > 2
) t on t.parent_id = p.id
set p.large_family = true
这种语法适用于mysql。
6ojccjat4#
UPDATE parents SET large_family = (SELECT CASE WHEN childcnt > 1 THEN 1 ELSE 0 END FROM (SELECT parent_id, Count(*) CHILDCNT FROM children WHERE parents.id = children.parent_id GROUP BY parent_id)) WHERE EXISTS (SELECT 1 FROM children WHERE parents.id = children.parent_id);
SET large_family = (SELECT CASE
WHEN childcnt > 1 THEN 1
FROM (SELECT parent_id,
Count(*) CHILDCNT
FROM children
WHERE parents.id = children.parent_id
GROUP BY parent_id))
WHERE EXISTS (SELECT 1
WHERE parents.id = children.parent_id);
4条答案
按热度按时间czq61nw11#
w7t8yxp52#
这是我的经验:对于大多数update查询,我编写它的select查询,然后将其更改为update。这样做非常简单。
pkmbmrz73#
加入表格
parents
返回所有parent_id
有两个以上孩子的:这种语法适用于mysql。
6ojccjat4#