Удаление данных из таблицы с условием - MySQL

Узнай цену своей работы

Формулировка задачи:

День добрый. Возникла проблема с запросом на удаление данных. Не могу понять, как удалить данные из одной таблицы с условием по двум таблицам. Таблица customers
client_id	name	active
1		aaa	Y
2		bbb	N
3		ccc	N
4		ddd	Y
Таблица customer_params
id	client_id	addr
1	2		8.8.8.8
2	4		4.4.4.4
3	3		6.6.6.6
Клиент может быть активен или не активен (поле active), может иметь или не иметь параметры в виде IP адреса в таблице customer_params. Задача: удалить записи из customer_params, если клиент неактивен active = N. Запрос
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
Я пытаюсь свой SELECT запрос использовать как подзапрос в запросе на удаление данных,
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);
Но mysql ругается. Убираю DELETE и ставлю SELECT, чтобы посмотреть результат
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, которые удовлетворяют условию. Список действий выглядит следующим образом:

  1. FROM customers, customer_params cp - указывает, из каких таблиц выбрать данные для удаления.
  2. DELETE cp.* - указывается, какие столбцы следует удалить.
  3. WHERE c.valid = 'N' - задается условие, что должны быть удалены только те строки, в которых значение столбца valid равно 'N'.
  4. AND c.customer_id = cp.customer_id - добавляется еще одно условие, что должны быть удалены только те строки, в которых значение столбца customer_id совпадает со значением столбца customer_id в таблице customers.

Оцени полезность:

6   голосов , оценка 4.333 из 5