Удаление данных из таблицы с условием - MySQL
Формулировка задачи:
День добрый.
Возникла проблема с запросом на удаление данных. Не могу понять, как удалить данные из одной таблицы с условием по двум таблицам.
Таблица customers
Таблица customer_params
Клиент может быть активен или не активен (поле active), может иметь или не иметь параметры в виде IP адреса в таблице customer_params.
Задача: удалить записи из customer_params, если клиент неактивен active = N.
Запрос
Выдает ответ
Я пытаюсь свой SELECT запрос использовать как подзапрос в запросе на удаление данных,
Но mysql ругается. Убираю DELETE и ставлю SELECT, чтобы посмотреть результат
И получаю ошибку
Подскажите, пожалуйста, решение. Или хоть в какую сторону двигаться.
Спасибо.
Листинг программы
- client_id name active
- 1 aaa Y
- 2 bbb N
- 3 ccc N
- 4 ddd Y
Листинг программы
- id client_id addr
- 1 2 8.8.8.8
- 2 4 4.4.4.4
- 3 3 6.6.6.6
Листинг программы
- select cp.id, c.client_id, c.name, c.valid, cp.addr
- from customers as c, customer_params as cp
- where c.valid = 'N'
- and c.customer_id = cp.customer_id;
Листинг программы
- cp.id c.client_id c.name c.valid cp.addr
- 1 2 bbb N 8.8.8.8
- 3 3 ccc N 6.6.6.6
Листинг программы
- delete from customer_params as cp
- where cp.id = (
- select cp.id
- from customers as c, customer_params as cp
- where c.valid = 'N'
- and c.customer_id = cp.customer_id);
Листинг программы
- select cp.id
- from customer_params as cp
- where cp.id = (
- select cp.id
- from customers as c, customer_params as cp
- where c.valid = 'N'
- and c.customer_id = cp.customer_id);
ERROR 1242 (21000) at line 11: Subquery returns more than 1 row
Решение задачи: «Удаление данных из таблицы с условием»
textual
Листинг программы
- DELETE cp.*
- FROM customers, customer_params cp
- WHERE c.valid = 'N'
- AND c.customer_id = cp.customer_id
Объяснение кода листинга программы
В данном коде выполняется удаление данных из таблицы customers и customer_params, которые удовлетворяют условию. Список действий выглядит следующим образом:
FROM customers, customer_params cp
- указывает, из каких таблиц выбрать данные для удаления.DELETE cp.*
- указывается, какие столбцы следует удалить.WHERE c.valid = 'N'
- задается условие, что должны быть удалены только те строки, в которых значение столбца valid равно 'N'.AND c.customer_id = cp.customer_id
- добавляется еще одно условие, что должны быть удалены только те строки, в которых значение столбца customer_id совпадает со значением столбца customer_id в таблице customers.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д