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

0ve6wy6x  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(521)

我的意思是,我想删除一个表中与另一个表位于同一个表中的所有行 type . 我试图在一个查询中定义它,但是当我从表中选择要从中删除行时,查询无法处理。
查询:

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

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

db2dz4w8

db2dz4w81#

Update 在特定表上,mysql不允许将同一个表用作 WHERE 条件。
但是,这里不需要使用子查询,一个简单的“self-inner join”就足够了。

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

zpjtge222#

只需在另一个子查询中使用它就可以了

DELETE FROM `user`
WHERE  `user_id` IN ( select * from (SELECT `user_id`
                     FROM   `user`
                     WHERE  `type` = 'x') a)
       AND `type` = 'y';
ig9co6j1

ig9co6j13#

你试过:

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

内部查询选择类型为的所有条目 'x' 或者 'y' ,这将删除类型x和y的所有用户。
假设表的形状如下所示:
用户

user_id | type
1          x 
2          x
3          y
4          y
5          z

相关问题