更新SQL查询以根据同一个表

时间:2015-07-06 08:35:59

标签: mysql sql-update mysql-workbench

我在数据库中有一个名为Menu的表。以下是此表中的字段:

`ID`,
`CompanyID`, 
`MenuName`, 
`MenuLink`, 
`ImageLink`, 
`ListOrder`, 
`Popup`, 
`Target`, 
`ParentMenuID`, 
`IsActive`,
`IsAdmin`

从第一张图片中可以看出,MenuName包含所有不同菜单的列表。

enter image description here

这有点复杂,所以我希望我能解释这一点。查看CompanyID等于99的行。在第二个图像中,ID等于1807.

enter image description here

现在在第三张图片中,当CompanyID也等于99时,看看ParentMenuID是如何设置为1807的。所以当MenuName = Public Holidays时,我需要设置字段ParentMenuID。当MenuName = Lookups时,我从ID中获取此值。 所以我的问题是如何在MenuName = Publicup时将所有ParentMenuID字段设置为与MenuName = Lookups时的ID字段匹配。

enter image description here

您可以看到第三个图像是否其他ParentMenuID字段等于1.我在此表中有近100行,并且无法一次更新所有这些行。是否有可以帮助的SQL查询?

1 个答案:

答案 0 :(得分:1)

因此,您要更新MenuName为“公共假期”的所有行,并将ParentMenuID设置为MenuName为“Lookups”且相同CompanyID的行的ID?试试这个问题:

UPDATE Menu p
INNER JOIN Menu l ON (l.CompanyID = p.CompanyID)
SET p.ParentMenuID = l.ID
WHERE p.MenuName = 'Public Holidays' -- Fixed Spelling 
AND l.MenuName = 'Lookups'

我在这里有点猜测,我建议你先备份你的数据,或先在一小部分上测试一下,看看它是否真的按照你想要的方式运行。

Syntax borrowed from this question on dba