powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Удаление данных из таблицы с условием
5 сообщений из 5, страница 1 из 1
Удаление данных из таблицы с условием
    #39417932
cnyx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Возникла проблема с запросом на удаление данных. Не могу понять, как удалить данные из одной таблицы с условием по двум таблицам.
Таблица customers
Код: sql
1.
2.
3.
4.
5.
client_id	name	active
1		aaa	Y
2		bbb	N
3		ccc	N
4		ddd	Y


Таблица customer_params
Код: sql
1.
2.
3.
4.
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.
Запрос
Код: sql
1.
2.
3.
4.
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;


Выдает ответ
Код: sql
1.
2.
3.
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 запрос использовать как подзапрос в запросе на удаление данных,
Код: sql
1.
2.
3.
4.
5.
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);


Но CODE ругается. Убираю DELETE и ставлю SELECT, чтобы посмотреть результат
Код: sql
1.
2.
3.
4.
5.
6.
7.
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

Подскажите, пожалуйста, решение. Или хоть в какую сторону двигаться.
Спасибо.
...
Рейтинг: 0 / 0
Удаление данных из таблицы с условием
    #39417945
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cnyx,

Оператор = сравнивает только два значения. Поэтому подзапрос должен вернуть только 1 строку. Вхождение значения в список из нескольких строк - это оператор in.

Ну и mysql не даст удалять из той таблицы, откуда этот же запрос данные читает. Обойти можно ещё одним подзапросом.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
delete from customer_params as cp
where cp.id in (
select id from (
select cp.id
from customers as c, customer_params as cp
where c.valid = 'N'
and c.customer_id = cp.customer_id) mysqlhack
);
...
Рейтинг: 0 / 0
Удаление данных из таблицы с условием
    #39418103
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хроническая неспособность читать мануалы дальше первого абзаца, что ли?
Код: sql
1.
2.
3.
4.
DELETE cp.*
FROM customers, customer_params cp
WHERE c.valid = 'N'
  AND c.customer_id = cp.customer_id
...
Рейтинг: 0 / 0
Удаление данных из таблицы с условием
    #39418624
cnyx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij, к сожалению ругается на первую же строку.
ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as cp


AkinaХроническая неспособность читать мануалы дальше первого абзаца, что ли?
Во-первых, большое спасибо, но ваш запрос работает. И по сути самый простой.
Во-вторых, я понимаю, что гуру mysql вопрос кажется тупым, но я с mysql имею дело может два раза в год. Некоторые тонкости не знаю, некоторые забываю, а потому, если не получается, лезу на форумы спрашивать и просить помощи.
...
Рейтинг: 0 / 0
Удаление данных из таблицы с условием
    #39418693
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cnyxя с mysql имею дело может два раза в год. Некоторые тонкости не знаю, некоторые забываю, а потому, если не получается, лезу на форумы спрашивать и просить помощи.Очень жаль, что предварительно не освежаете свои знания чтением документации. Десять минут на почитать и применить самостоятельно, или три часа (если повезёт ещё) ждать ответа - есть разница?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Удаление данных из таблицы с условием
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]