使用嵌套子查询的MYSQL更新

时间:2017-04-27 17:07:01

标签: mysql sql subquery nested-queries

我有3种表格格式:

表儿童:

id|parent_id|grandparent_id
1  1         null
2  2         null
3  3         null

表父:

id|grandparent_id
1          1
2          1
3          2

表GrandParent:

id
1          
2          

我需要运行一个查询,根据Parent表中的grandparent_id更新Child表中的grandparent_id列。因此Child表的正确最终形式将是: 表儿童:

id|parent_id|grandparent_id
1  1         1
2  2         1
3  3         2

这是我目前的查询,但它返回的行超过1行,这是错误的:

update child set grandparent_id = (
  select gpd.id from GrandParent gp, Parent p 
  where p.grandparent_id = gp.id) 
where 1

2 个答案:

答案 0 :(得分:1)

您可以使用以下查询来获取UPDATE

UPDATE Child SET Child.grandparent_id = (
    SELECT GrandParent.id 
    FROM GrandParent INNER JOIN Parent ON GrandParent.id = Parent.grandparent_id
    WHERE Parent.id = parent_id
) WHERE Child.grandparent_id IS NULL;
  

演示: http://sqlfiddle.com/#!9/894e97/1/0 (已修改的表格内容显示UPDATE正在运行)

     

提示:您的"正确" 示例错误:GrandParent Parent id = 2 1

答案 1 :(得分:0)

请尝试以下查询:

Update child c,parent p
set c.grandparent_id = p.grandparent_id
where c.id = parent.id 
and c.grandparent_id = ' '