@LeonidPokrovskiy

Что не так с SQL запросом?

У меня есть таблица с кодами верификаии - registration_verification_codes. В этой таблице есть поле ip

Также есть таблица registration_banned_ips - в ней хранятся временно заблокированные ip

Мне надо выбрать все ip из таблицы registration_banned_ips, которые встречались в столбце ip таблицы registration_verification_codes 2 раза.

Я делаю это так:

DELETE FROM registration_banned_ips
WHERE

  banned_until_timestamp + 60*POWER(2,
    (SELECT COUNT(ip) FROM registration_banned_ips WHERE ip IN (SELECT registration_verification_codes.ip FROM registration_verification_codes)) + 1)

 < UNIX_TIMESTAMP();


Однако, MySQL ругается:

#1093 - Не допускается указание таблицы 'registration_banned_ips' в списке таблиц FROM для внесения в нее изменений


Что я сделал не так?
  • Вопрос задан
  • 137 просмотров
Решения вопроса 3
mahmudchon
@mahmudchon
В SQL оператор равенства =
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
в мускуле не допускается использование таблиц из delete в подзапросах (емнип как и в других РБД).
Как вариант - обернуть запрос в дополнительный селект, тем самым организовав временную таблицу для внутренней выборки.
На будущее, для лучшего понимания проблем в запросе:
1) Аккуратно форматируйте запрос, разбивая на строки каждую конструкцию из запроса.
2) Следите за номером строки выдаваемом в ошибке запросов, так вам будет легче локализовать проблему.
3) Крайне не желательно вывод ошибок осуществлять на русском, старайтесь использовать англоязычные инструменты. Это позволит быстрее находить ошибки по тексту, не путаясь в переводах.
Ответ написан
Комментировать
@Timosha_Shakal
SELECT registration_banned_ips.ip 
FROM registration_banned_ips, ( 
SELECT registration_verification_codes .ip as num, COUNT(registration_verification_codes .ip) as cnt 
FROM registration_verification_codes 
GROUP BY num
) as tbl 
WHERE registration_banned_ips.ip=tbl.num AND tbl.cnt=2 
GROUP BY registration_banned_ips.ip

если не ошибся, то фигня выше должна
выбрать все ip из таблицы registration_banned_ips, которые встречались в столбце ip таблицы registration_verification_codes 2 раза.
, хотя скорее всего есть более простой способ
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
Это вообще не SQL-запрос. Это ваша фантазия на тему, как писать на SQL.
Пройдите какие-нибудь бесплатные курсы типа sql-ex.ru хотя бы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы