Mysql 如何删除y类型的所有行,这些行在同一个x类型的表中也包含一个条目?

Mysql 如何删除y类型的所有行,这些行在同一个x类型的表中也包含一个条目?,mysql,mariadb,Mysql,Mariadb,我的意思是,我想删除一个表中与另一个类型位于同一个表中的所有行。我试图在一个查询中定义这一点,但由于我正在从表中选择要从中删除行的位置,因此无法处理该查询 查询: DELETE FROM `user` WHERE `user_id` IN (SELECT `user_id` FROM `user` WHERE `type` = 'x') AND `type` = 'y'; 如何重写此查询以

我的意思是,我想删除一个表中与另一个
类型
位于同一个表中的所有行。我试图在一个查询中定义这一点,但由于我正在从表中选择要从中删除行的位置,因此无法处理该查询

查询:

DELETE FROM `user`
WHERE  `user_id` IN (SELECT `user_id`
                     FROM   `user`
                     WHERE  `type` = 'x')
       AND `type` = 'y';

如何重写此查询以使其正常工作?

在特定表的
Update
子句中,MySQL不允许在
WHERE
条件下将同一表用作子查询的“源”

但是,这里不需要使用子查询,简单的“自内部联接”就足够了

DELETE u1 FROM `user` AS u1 
JOIN `user` AS u2 
  ON u2.`user` = u1.`user` AND 
     u2.`type` = 'x'
WHERE u1.type = 'y';

只需在另一个子查询中使用即可

DELETE FROM `user`
WHERE  `user_id` IN ( select * from (SELECT `user_id`
                     FROM   `user`
                     WHERE  `type` = 'x') a)
       AND `type` = 'y';
您是否尝试过:

DELETE FROM `user`
WHERE  `user_id` IN (SELECT `user_id`
                     FROM   `user`
                      WHERE  `type` = 'x' OR `type` = 'y')
内部查询选择类型为
'x'
'y'
的所有条目,这将删除类型为x和y的所有用户

假设表格的形状如下所示:

使用者



这将如何改变您使用与源和目标相同的表的事实?@dnoeth请检查更新的答案。此外,MySQL不允许使用同一个表(正在更新)作为Where条件子查询的源。我知道,我认为任何类型的更新都是如此。
user_id | type
1          x 
2          x
3          y
4          y
5          z