mysql - 使用多个表删除并在子查询中重复表

标签 mysql sql

我想解雇销售额较低部门的所有员工

架构和 Sql fiddle

CREATE TABLE Employee
    (`ID` int, `name` varchar(6), `deptID` int);

INSERT INTO Employee
    (`ID`, `name`, `deptID`)
VALUES
    (1, 'Jhon', NULL),       (2, 'Luis', 1),
    (3, 'Angela', 1),        (4, 'Peter', NULL),
    (5, 'Sonia', 4),         (6, 'Oliver', 4);

CREATE TABLE Sales
    (`ID` int, `Sales` int);

INSERT INTO Sales
    (`ID`, `Sales`)
VALUES
    (1, 100),        (2, 300),
    (3, 500),        (4, 600),
    (5, 250),        (6, 150);

我可以做这样的事情

DELETE E 
FROM Employee E
INNER JOIN Sales S 
   ON E.`ID` = S.`ID`
WHERE `SALES` = 600;

我想要什么

DELETE E1 
FROM Employee E1
WHERE `deptID` IN (
            SELECT `deptID`
            FROM Employee E 
            Inner JOIN Sales S
               ON E.`ID` = S.`ID`
            GROUP BY `deptID`
            HAVING SUM(`Sales`) <= 400
        );

但是我不能按照 manual 上的描述在内部 SELECT 中使用 Employee

Subqueries
Currently, you cannot delete from a table and select from the same table in a subquery.

那么正确的语法或解决方法是什么?

最佳答案

使用JOIN

DELETE e1
FROM Employee AS e1
JOIN (SELECT deptID
      FROM Employee AS e
      JOIN Sales AS s ON e.ID = s.ID
      GROUP BY deptID
      HAVING SUM(Sales) <= 400) AS d
ON e1.deptID = d.deptID

关于mysql - 使用多个表删除并在子查询中重复表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770114/

相关文章:

MySQL 查询异常从 Powershell v4 调用 "Fill"并使用 "2"参数

mysql - 显示(多个)变量

php - laravel - 使用现有数据创建新的迁移表

php - 将 mysqli_multi_query 与多个查询一起使用时无法提交

mysql - 如何使用 UNION 选择所有字段(包括 NULL)?

sql - 存储过程中准备好的SQL语句是否会使性能更好?

mysql - 确定 MySQL 连接是否仍然存在的最便宜的方法

mysql - 在本地主机上导入 MySQL 数据库

SQL 使用列名别名而不使用 SELECTING

sql - PostgreSQL - 键值对规范化