我有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
答案 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 = ' '