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