powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / DELETE
12 сообщений из 12, страница 1 из 1
DELETE
    #34217128
Фотография Burzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вложеный селект, возвращаюет одинаковых юзеров в таблице mysql.user и в моей Users. Весь селект выдаёт права, которые даны пользователям, присутствующим в обеих таблицах.
Код: plaintext
1.
2.
3.
4.
5.
SELECT * FROM mysql.tables_priv TP
WHERE CONCAT_WS(',', TP.User, TP.Host) in (
	SELECT CONCAT_WS(',', U.UserName, MU.Host)
	FROM Users U LEFT JOIN mysql.user MU
		ON U.UserName=MU.User);
Как написать DELETE, удаляющий найденые выше строки?
Код: plaintext
1.
2.
3.
4.
5.
DELETE FROM mysql.tables_priv TP
WHERE CONCAT_WS(',', TP.User, TP.Host) in (
	SELECT CONCAT_WS(',', U.UserName, MU.Host)
	FROM Users U LEFT JOIN mysql.user MU
		ON U.UserName=MU.User);
ругань на DELETE
Error Code : 1064
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 'WHERE CONCAT_WS(',', TP.User, TP.Host) in (
SELECT CONCAT_WS(',', U.UserName, ' at line 2
...
Рейтинг: 0 / 0
DELETE
    #34217140
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Советуют использовать временные таблицы (смотри комментарии к статье).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TEMPORARY TABLE tmptable
SELECT A.* FROM table1 AS A, table1 AS B
WHERE A.username LIKE '%2'
AND A.ID = B.ID
AND A.username <> B.username;

DELETE table1 FROM table1
INNER JOIN tmptable
ON table1.username = tmptable.username;

Код: plaintext
mahoune
...
Рейтинг: 0 / 0
DELETE
    #34217388
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Burzum пишет:

Вовсе не обязательно использовать временные таблицы.

Видимо надо так:

DELETE FROM mysql.tables_priv

И таблицу именовать не через алиас, а полным именем.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
DELETE
    #34217755
Фотография Burzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
DELETE FROM mysql.tables_priv
WHERE CONCAT_WS(',', mysql.tables_priv.User, mysql.tables_priv.Host) IN (
	SELECT CONCAT_WS(',', U.UserName, MU.Host)
	FROM Users U LEFT JOIN mysql.user MU
		ON U.UserName=MU.User);
Действительно сработало.
Это мускулевский глюг, то что он не работает с алиасами в дэлите? Ведь алиас даже не во вложенном запросе используется... или он не умеет использовать алиасы на таблицы в другой БД?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
DELETE
    #38700155
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что за идиотский MySQL!!!!
Снова новые грабли на ровном месте.
Почему не работает удаление?
Код: sql
1.
2.
3.
4.
5.
6.
DELETE FROM
   bd.table1 WHERE bd.table1.product_id NOT IN

(SELECT bd.table1.product_id FROM bd.table1 INNER JOIN bd.table2
  ON bd.table1.product_id = bd.table2.product_id
  WHERE bd.table1.status = 1);


Пишет, что You can't specify target table 'table1' for update in FROM clause SQL.sql
...
Рейтинг: 0 / 0
DELETE
    #38700157
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или нельзя удалять из таблицы к которой идет запрос в WHERE?
...
Рейтинг: 0 / 0
DELETE
    #38700167
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже что мое предположение оказалось верным.
Через временную таблицу все удалилось без проблем.

Вывод - нельзя апдейтить таблицу, которая есть в условиях отбора.
Чтобы самому себе "не наступить на хвост".
Вопрос закрыт.
...
Рейтинг: 0 / 0
DELETE
    #38700172
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008,

Нельзя использовать модифицируемую таблицу в подзапросе.

Подзапрос тут и не нужен, перепишите запрос без него. Заодно и быстрее будет.
...
Рейтинг: 0 / 0
DELETE
    #38700216
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftSQL2008,

Нельзя использовать модифицируемую таблицу в подзапросе.

Подзапрос тут и не нужен, перепишите запрос без него. Заодно и быстрее будет.
да, спасибо!
Только запрос нужен был на один раз, вычистить лишние данные, поэтому вопросом оптимизации
как и лишними связанными таблицами не заморачивался.
...
Рейтинг: 0 / 0
DELETE
    #38700290
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Burzum
Код: sql
1.
2.
3.
4.
5.
DELETE FROM mysql.tables_priv
WHERE CONCAT_WS(',', mysql.tables_priv.User, mysql.tables_priv.Host) IN (
	SELECT CONCAT_WS(',', U.UserName, MU.Host)
	FROM Users U LEFT JOIN mysql.user MU
		ON U.UserName=MU.User);


Действительно сработало.
Это мускулевский глюг, то что он не работает с алиасами в дэлите? Ведь алиас даже не во вложенном запросе используется... или он не умеет использовать алиасы на таблицы в другой БД?

Вобще-то, MySQL нормально работает с alias:
Код: sql
1.
2.
3.
4.
5.
DELETE TP FROM mysql.tables_priv TP
WHERE CONCAT_WS(',', TP.User, TP.Host) in (
	SELECT CONCAT_WS(',', U.UserName, MU.Host)
	FROM Users U LEFT JOIN mysql.user MU
		ON U.UserName=MU.User);
...
Рейтинг: 0 / 0
DELETE
    #38700297
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич Александр,

Думаю, что Burzum-у это давно не актуально. :)
...
Рейтинг: 0 / 0
DELETE
    #38700478
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Ну может кто зайдет в ветку, и увидит как надо, а то будут думать что
"...Это мускулевский глюг, то что он не работает с алиасами в дэлите..."
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / DELETE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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