更新 SQL 查询以根据同一 table 中的 ID 更改字段

Update SQL query to change a field based on ID in same table

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

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

正如您从第一张图片中看到的,MenuName 包含所有不同菜单的列表。

这有点复杂,所以我希望我解释得对。查看 CompanyID 等于 99 的行。在第二张图片中,ID 等于 1807。

现在在第三张图片中看到当CompanyID 也等于99 时ParentMenuID 是如何设置为1807 的。所以当MenuName = Public Holidays 时,我需要设置字段ParentMenuID。当 MenuName = Lookups 时,我从 ID 得到这个值。 所以我的问题是当 MenuName = Public Holiday 时如何设置所有 ParentMenuID 字段以匹配 MenuName = Lookups.

时的 ID 字段

你可以看看第三张图片其他ParentMenuID字段是否等于1。我在这个table中有将近100行并且不能一次更新它们。是否有 SQL 查询可以帮助解决这个问题?

因此,您想更新 MenuName 为 "Public Holidays" 的所有行,并将 ParentMenuID 设置为 MenuName 为 "Lookups" 的行的 ID 和相同的 CompanyID?试试这个查询:

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