2015-07-06 78 views
0

我在名爲Menu的數據庫中有一個表。以下是此表中的字段:更新SQL查詢以根據同一個表中的ID更改字段

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

正如您從第一張圖片中看到的那樣,MenuName包含所有不同菜單的列表。

enter image description here

這是一個有點複雜,所以我希望我解釋這個權利。看到的行,其中CompanyID等於99.在第二圖像的ID等於1807

enter image description here

現在在第三圖像中看到ParentMenuID是如何設定爲1807,當CompanyID也等於99 。因此,當MenuName = Public Holidays時,我需要設置ParentMenuID字段。當MenuName = Lookups時,我從ID中獲得該值。 所以我的問題是如何設置所有ParentMenuID字段時MenuName =公共假期匹配ID字段時MenuName =查找。

enter image description here

你可以看到,如果第三圖像其他ParentMenuID字段等於1。我在此表近100行,不能全部更新一次一個。有沒有可以在這裏幫助的SQL查詢?

+0

您能否重新解釋這個問題。在我的大腦處理的問題有太多的變量:) 我理解你的分貝的結構,但不明白什麼是你要查詢的查詢 –

+0

是否 IF MenuName = Public Holiday and Menuname!= Lookup然後 更改所有ParentMenuID = 1 結束 –

+0

@AbhilashCherukat好的我試着編輯我的問題。我知道它很複雜,但如果你看圖像,你可以看到我想要做什麼。當MenuName =公共節假日時,MenuName = Lookups需要與ParentMenuID相同 – user123456789

回答

1

因此,您想要更新MenuName爲「Public Holidays」的所有行並將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

+0

爲了測試我剛添加了行p。CompanyID = 103所以它只會影響一行,但它不起作用 – user123456789

+0

任何錯誤?我目前手邊沒有mysql,你可以創建一個http://sqlfiddle.com/並帶有一些測試行讓我們檢查。 –

+0

不,我在MySQL Workbench中運行它時,它只是給出了0行受影響的行匹配:0更改:0警告:0 – user123456789

相關問題