Size: a a a

DBA - русскоговорящее сообщество

2021 January 14

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Mr. Crestoff
Найдено 2 ошибок при анализе.

Неожиданное ключевое слово. (near "WHERE" at position 26)
Неизвестный оператор. (near "WHERE" at position 26)
Ой, я забыл, там ещё есть семантическая сложность - коррелированые подзапросы там где-то нельзя юзать.
Но синтаксически можно
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Mr. Crestoff
наверное копировать нужно
Не, оно обходится
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Mr. Crestoff
mysql> DELETE FROM attribute WHERE id IN (SELECT id FROM attribute as attr WHERE NOT EXISTS         (
       SELECT  null         FROM    attribute as attr2         WHERE   attr.parent_attribute_id = attr2.id         )         AND attr.parent_attribute_id IS NOT NULL);
ERROR 1093 (HY000): You can't specify target table 'attribute' for update in FROM clause
Для начала убери from из delete
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
Убрал
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
Вот результат
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
Переслано от Mr. Crestoff
источник

AP

Alexander Podrezov in DBA - русскоговорящее сообщество
Уберите везде as. Оставив только альяс таблицы.
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
DELETE FROM attribute attr
    WHERE NOT EXISTS
        (SELECT NULL
         FROM attribute attr2
         WHERE attr.parent_attribute_id = attr2.id )
      AND attr.parent_attribute_id IS NOT NULL
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
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 'attr      WHERE NOT EXISTS          (SELECT NULL
         FROM attribute attr2 ' at line 1
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
но чот не могу понять как применить это...
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
DELETE
FROM attribute
WHERE id IN
   (SELECT *
    FROM
      (SELECT id
       FROM attribute AS attr
       WHERE NOT EXISTS
           (SELECT NULL
            FROM attribute AS attr2
            WHERE attr.parent_attribute_id = attr2.id )
         AND attr.parent_attribute_id IS NOT NULL) AS t1);
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
вот так сработало
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Mr. Crestoff
DELETE FROM attribute attr
    WHERE NOT EXISTS
        (SELECT NULL
         FROM attribute attr2
         WHERE attr.parent_attribute_id = attr2.id )
      AND attr.parent_attribute_id IS NOT NULL
From из delete!
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
без фром ругается
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
всё ок уже
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
запрос выполнился успешно
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Mr. Crestoff
но чот не могу понять как применить это...
Парень, идёшь на сайт MySQL, открываешь reference.
там - полный синтаксис delete.
Смотришь на него, и по диаграмме рисуешь запрос.
Все!
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
да уже удалил всё, спасибо)
источник

MC

Mr. Crestoff in DBA - русскоговорящее сообщество
Query OK, 8210047 rows affected (37 min 51.02 sec)
источник