Не удалось получить, где запрос работает в не в

#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:

Хорошо — я обнаружил проблему, вызвавшую это, у Марии есть настройка базы данных, которая не позволяет НЕ ВХОДИТЬ.

Обычно это происходит с некоторым общим хостингом.