#mysql #mariadb #mariadb-10.3
Вопрос:
DELETE FROM `tblinvoices` WHERE userid NOT IN (SELECT f.id FROM `tblclients` f);
Я выполняю приведенный выше запрос для удаления счетов-фактур, в которых идентификатор пользователя не существует в пуле клиентов.
Теоретически, каждая часть этого запроса работает индивидуально, но при объединении «НЕ В» — не работает.
Я понятия не имею, почему это так, я много раз проверял это и вообще не могу заставить это работать.
При выполнении приведенного ниже запроса из tblinvoices:
SELECT * FROM `tblinvoices` WHERE userid = 73;
Запрос возвращается правильно и возвращает счета этого пользователя:
SELECT f.id FROM `tblclients` f;
Также отлично работает сам по себе, возвращая все идентификаторы пользователей из tblclients.
Я ИСПОЛЬЗУЮ SELECT ДЛЯ ПРЕДВАРИТЕЛЬНОГО ПРОСМОТРА ИЗМЕНЕНИЙ
Имитируя запрос, я вижу, что это возвращается:
SQL query:
DELETE FROM `tblinvoices` WHERE userid NOT IN (SELECT f.id FROM `tblclients` f)
Matched rows: 0
Комментарии:
1. Запрос, на который вы жалуетесь, не удаляет счета-фактуры, является
SELECT
запросом, а неDELETE
запросом…2. @obe Да, я в курсе, я использую SELECT для предварительного просмотра результатов.
3. Затем предоставьте фактический запрос, который вам не подходит…
4. Выполнено. Я обновил вопрос.
5. Что именно не работает? Можете ли вы воспроизвести свою проблему в скрипке: dbfiddle.uk/?rdbms=mysql_8.0 ?
Ответ №1:
Ваш запрос верен .Пожалуйста,проверьте типы данных идентификатора пользователя в обеих таблицах tblinvoices и tblclients, оба должны быть одного типа данных и проверьте доступные или недоступные идентификаторы tblinvoices
Ответ №2:
Хорошо — я обнаружил проблему, вызвавшую это, у Марии есть настройка базы данных, которая не позволяет НЕ ВХОДИТЬ.
Обычно это происходит с некоторым общим хостингом.