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

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

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

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

Решение задачи: «Удаление данных из таблицы с условием»

textual
Листинг программы
  1. DELETE cp.*
  2. FROM customers, customer_params cp
  3. WHERE c.valid = 'N'
  4. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут