Sql 给在X城工作的人加薪?
假设这是两张表:Sql 给在X城工作的人加薪?,sql,Sql,假设这是两张表: workers[name, dep_id, salary] 及 我怎样才能提高在某个城市工作的人的工资 我只知道如果城市在workers表中(那么它只是更新workers SET salary=salary*1.1,其中city='X'),但是当salary和city在不同的表中时,它不起作用。您可以使用以下查询: UPDATE workers w SET salary = salary * 1.1 WHERE EXISTS (SELECT *
workers[name, dep_id, salary]
及
我怎样才能提高在某个城市工作的人的工资
我只知道如果城市在workers表中(那么它只是
更新workers SET salary=salary*1.1,其中city='X'
),但是当salary
和city
在不同的表中时,它不起作用。您可以使用以下查询:
UPDATE workers w
SET salary = salary * 1.1
WHERE EXISTS (SELECT *
FROM departments d
WHERE d.id = w.dep_id
AND d.city = 'X')
您还可以使用其他查询,具体取决于您的特定系统
UPDATE w
SET w.salary = w.salary*1.1
FROM workers w
LEFT JOIN department d
ON d.id = w.dept_id
WHERE d.city = 'denver'
我相信这会奏效。左键加入部门将为您提供为workers中的每一行查找的额外列
UPDATE
w
SET
w.salary = w.salary * 1.1
FROM
workers w
INNER JOIN
departments d
ON
w.dep_id = d.id
WHERE
d.city = 'X'
执行任何数据更新的最佳和最安全的方法是首先选择要更新的行。
所以第一步是
SELECT (*) // Select all
FROM
workers w // From workers
INNER JOIN
departments d // and departments
ON
w.dep_id = d.id // where workers dep_id vakue is in
// departments id column
// INNER JOIN get ONLY that data
WHERE
d.city = 'X' // and filter by city name
现在,您可以将“选择零件”替换为
UPDATE
w // Update table which name or alias is w
SET
w.salary = w.salary * 1.1 / set salary to current salary * 1.1
在不同风格的SQL中,这可能会有不同的重复,您使用的是哪个数据库后端。这很重要。我必须指出,这种设计在许多工作场所都有缺陷。仅仅因为该部门位于一个城市,并不能保证所有员工都在工作。我的部门位于弗吉尼亚州的一个城市,但我们的员工分布在科罗拉多州、宾夕法尼亚州、德克萨斯州、伊利诺伊州、马里兰州和弗吉尼亚州的其他城市以及海外。员工和部门的内部联接将返回表部门id列中的所有员工。何处将过滤此结果,因此我们将只有位于城市“X”的部门的工作人员。现在我们将所有这些员工的工资更新为当前工资*1.1您能用同样的东西更新答案吗?我知道SQL是如何工作的,但这只是一个遵循社区指导原则的要求。我相信现在就足够了:)
UPDATE
w // Update table which name or alias is w
SET
w.salary = w.salary * 1.1 / set salary to current salary * 1.1