Jabatan yang mempunyai purata gaji terendah akan menerima kenaikan gaji sebanyak 10%.
P粉759457420
P粉759457420 2024-01-16 16:43:12
0
1
405

Penyelesaian soalan temu duga ini tidak berfungsi kerana saya mempunyai dua lajur dalam subkueri jika saya menggunakan klausa IN 代替 = ,则无法使用 LIMIT 位于 WHERE selepas. Saya menggunakan MySQL.

UPDATE employees 
SET salary = salary + (0.10*salary) 
WHERE team = (
    SELECT team, AVG(salary) avg_sal
    FROM employee
    GROUP BY team ORDER BY avg_sal LIMIT 1)

Pertanyaan di atas akan menimbulkan ralat berikut: SQL 错误 [1241] [21000]:操作数应包含 1 列

Jika dalam WHERE 子句后面使用 IN 而不是 = dalam pertanyaan di atas, ralat berikut akan dilemparkan:

SQL 错误 [1235] [42000]:此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”

Penyelesaian yang diharapkan adalah seperti yang dinyatakan dalam tajuk: 平均工资最低的部门加薪10%

Bagaimana saya boleh menulis semula pertanyaan ini untuk mengatasi masalah ini?

P粉759457420
P粉759457420

membalas semua(1)
P粉155128211

Anda boleh mempunyai pasukan pulangan subkueri sahaja dan bukannya kedua-dua lajur. Mungkin, ini adalah pertanyaan yang ingin anda tulis:

update employees e
set e.salary = 1.1 * e.salary
where team = (select team from employees group by team order by avg(salary) limit 1)

Malangnya, ini membuang ralat :

Ini adalah had biasa MySQL, yang tidak membenarkan anda membuka semula where 子句中更新的表。相反,您可以加入:

update employees e
inner join (select team from employees group by team order by avg(salary) limit 1) e1 
    on e1.team = e.team
set e.salary = 1.1 * e.salary
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan