Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 给在X城工作的人加薪?_Sql - Fatal编程技术网

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