Удаление данных из таблицы с условием - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д