source

유형이 x인 동일한 테이블에 엔트리가 포함된 유형이 y인 행을 모두 삭제하려면 어떻게 해야 합니까?

manysource 2022. 11. 13. 19:34

유형이 x인 동일한 테이블에 엔트리가 포함된 유형이 y인 행을 모두 삭제하려면 어떻게 해야 합니까?

즉, 다른 테이블과 같은 테이블에 있는 모든 행을 삭제해야 합니다.type쿼리에서 정의하려고 했는데, 행을 삭제할 테이블에서 선택하고 있기 때문에 쿼리를 처리할 수 없습니다.

쿼리:

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

어떻게 하면 이 쿼리를 다시 쓸 수 있을까요?

실행 중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';

다른 서브쿼리 안에서만 사용해도 된다

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 유형의 모든 사용자가 삭제됩니다.

표의 모양이 다음과 같이 생겼다고 가정합니다.

사용자


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

언급URL : https://stackoverflow.com/questions/53224295/how-to-delete-all-rows-with-type-y-that-also-contain-an-entry-in-the-same-table