Запрос SQL для обновления поля - PullRequest
0 голосов
/ 21 июня 2020

У нас есть две таблицы:

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

Мне нужен запрос SQL для обновления поля «large_family» в родительской таблице до «true», если родитель имеет более двух дочерних элементов.

Ответы [ 4 ]

1 голос
/ 21 июня 2020
    UPDATE parents
    SET large_family = CASE
                       WHEN (SELECT COUNT(*) FROM children WHERE parent_id = parents.id) > 2 THEN 1
                       ELSE 0
                       END
0 голосов
/ 21 июня 2020

Присоединяйтесь к таблице parents к запросу, который возвращает все parent_id s, у которых более 2 дочерних элементов:

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.

0 голосов
/ 21 июня 2020

это мой опыт: для большинства запросов на обновление я пишу его запрос select, а затем меняю его на update. Этот способ очень упрощает.

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
0 голосов
/ 21 июня 2020
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); 
...