@rinaz22

Как сделать жесткое исключение NOT IN в mysql?

Всем привет! Есть таблица с номерами. В этой таблице может быть несколько одинаковых номеров с разными service. Нужно при получении номеров исключить все номера, у которых service = 1,2 или 3.
Пробовал использовать NOT IN(1,2,3), но т.к. есть такой же номер с другим service(например 5), то этот номер попадает в запрос. Как можно исключить полностью, включая даже дубли?
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
Должно быть что-то вроде такого:
SELECT * FROM my_table WHERE `number` NOT IN 
  ( SELECT `number`  FROM my_table WHERE `service` IN (1,2,3) )

(пишу по памяти)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
Разумнее использовать WHERE NOT EXIST, который скорее всего будет более эффективен:
SELECT [DISTINCT] number
FROM table t1
WHERE service NOT IN (1,2,3)
  AND NOT EXISTS (
    SELECT NULL
    FROM table t2
    WHERE t1.number = t2.number
      AND t2.service IN (1,2,3)
)

Индекс по (number, service) - весьма желателен.

Если service - целочисленное поле со значениями от единицы и более, то для даных конкретных условий можно построить и более эффективный запрос:
SELECT number
FROM test
GROUP BY number
HAVING MIN(service) > 3
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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