Для проверки того, что значение не попадает в список значений, можно воспользоваться NOT IN.
Запрос
SELECT *
FROM store
WHERE store_id NOT IN (100, 300, 500)
ORDER BY store_id
вернет все магазины, кроме магазинов с идентификаторами 100, 300 и 500.
| # | store_id | name | site_url |
|---|---|---|---|
| 1 | 200 | Марс | mars.ru |
| 2 | 201 | Сатурн | saturn.ru |
| 3 | 301 | Адалин-family | adalin-ultra.ru |
| 4 | 302 | Адалин-ultra | |
| 5 | 400 | Европа | evropa.ru |
| 6 | 600 | Umi | |
| 7 | 800 | Универсам | |
| 8 | 900 | Big | big.ru |
Список значений внутри NOT IN можно заменить подзапросом.
Найдем города без магазинов:
SELECT *
FROM city c
WHERE c.city_id NOT IN (SELECT sa.city_id
FROM store_address sa)
| # | city_id | name | timezone_id |
|---|---|---|---|
| 1 | 7 | Кемерово | 6 |
| 2 | 10 | Иркутск | 7 |