Как удалить все строки с типом y, которые также содержат запись в той же таблице с типом x? - PullRequest
0 голосов
/ 09 ноября 2018

Я имею в виду, что я хочу удалить все строки в таблице, которые находятся в той же таблице, с другим type. Я попытался определить это в запросе, но, поскольку я выбираю из таблицы, из которой я также хочу удалить строку, запрос не может быть обработан.

Запрос:

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

Как мне переписать этот запрос, чтобы он работал?

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

просто используйте внутри другого подзапроса, он будет работать

DELETE FROM `user`
WHERE  `user_id` IN ( select * from (SELECT `user_id`
                     FROM   `user`
                     WHERE  `type` = 'x') a)
       AND `type` = 'y';
0 голосов
/ 09 ноября 2018

Вы пробовали:

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

Внутренний запрос выбирает все записи с типом 'x' или 'y', это удалит всех пользователей типа x и y.

Предполагая, что форма стола выглядит следующим образом:

USER


user_id | type
1          x 
2          x
3          y
4          y
5          z
0 голосов
/ 09 ноября 2018

Во время предложения 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...