簡體   English   中英

帶有所需子查詢的 MySQL UPDATE

[英]MySQL UPDATE with needed subquery

對於學校,我有以下任務將數據更新到數據庫中:

給所有在員工“ 50 ”(員工代碼)工作的項目中工作的員工(位於員工表中)以及 250 歐元的加薪

我知道我必須在員工中獲得SAL列,然后將其提高 250 歐元。 我目前通過以下查詢做到了這一點。

UPDATE `work` AS work
INNER JOIN `employee` AS employee ON employee.`CODE` = work.`W_CODE`
SET employee.`SAL` = (employee.`SAL` + 250)
WHERE work.`P_CODE` IN  ( # .... );

P_CODE列代表項目標識符。 work表中,列出了所有員工與他們正在處理的當前項目。

為了獲取代碼為50員工所從事的項目,我進行了以下子查詢:

UPDATE `work` AS work
INNER JOIN `employee` AS employee ON employee.`CODE` = work.`W_CODE`
SET employee.`SAL` = (employee.`SAL` + 250)
WHERE work.`P_CODE` IN (SELECT work.`P_CODE` 
                        FROM `work` AS work
                        INNER JOIN `employee` AS employee ON `employee`.`CODE` = work.`W_CODE`
                        WHERE employee.`CODE` = "50");

運行此查詢時,我收到此錯誤:

錯誤代碼:1093。表 'work' 被指定兩次,既作為 'UPDATE' 的目標,也作為單獨的數據源

對於我自己的嘗試,我做了一些研究,發現我不能為此兩次使用同一張桌子。

問題

如何在子查詢將起作用的地方修復此查詢? 可以在我第一次加入時合並嗎?

嘗試使用不同的別名,例如:w1 和 w2 用於工作

UPDATE `work` 
    AS w1

    INNER JOIN `employee` AS employee
        on employee.`CODE` = w1.`W_CODE`

    SET employee.`SAL` = (employee.`SAL` + 250)

    WHERE w1.`P_CODE` IN  ( select t.my_code from (
    SELECT w2.`P_CODE` as my_code 
        FROM `work` AS w2
        INNER JOIN `employee` AS employee
            ON `employee`.`CODE` = w2.`W_CODE`
        WHERE employee.`CODE` = "50"
    )  t ) ;

更新員工為 e1 set e1.Salary=(e1.Salary+20) where e1.workId IN ( select workId from ( select e2.workId from employee as e2 inner join 在 e2.workId=w2.id where e2. workId=50 ) 作為 x)

詳細解釋請參考鏈接: http : //www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/

@Bas 在上面的查詢中,我已經考慮更新員工表,因此您可以進行相應的更改。

如果結構是這樣的,這個查詢就可以正常工作:

1)員工表...................... empid(P鍵) | workId(F 鍵) | 姓名 |薪資

2)工作表id(P鍵)| 工作代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM