У меня есть таблица под названием «страны», связанная с другой таблицей «сети» с отношением «многие ко многим»:
countries countries_networks networks
+-------------+----------+ +-------------+----------+ +-------------+---------------+
| Field | Type | | Field | Type | | Field | Type |
+-------------+----------+ +-------------+----------+ +-------------+---------------+
| id | int(11) | | id | int(11) | | id | int(11) |
| countryName | char(35) | | country_id | int(11) | | name | varchar(100) |
+-------------+----------+ | network_id | int(11) | | description | varchar(255) |
Чтобы извлечь все страны, у которых network_id равен 6 и 7, я просто делаю следующее: (Я мог бы пойти дальше, чтобы использовать network.name, но я знаю country_networks.network_id, поэтому я просто использую их для сокращения SQL)
SELECT DISTINCT countryName
FROM countries AS Country
INNER JOIN countries_networks AS n ON Country.id = n.country_id
WHERE n.network_id IN (6,7)
Это нормально, но тогда я хочу получить страны с идентификатором сети, равным 8, и без других.
Я пробовал следующее, но он все еще возвращает сети с 6 и 7 дюймами. Это как-то связано с моим JOIN?
SELECT DISTINCT countryName
FROM countries AS Country
INNER JOIN countries_networks AS n ON Country.id = n.country_id
WHERE n.network_id IN (8)
AND n.network_id not IN(6,7)
Спасибо.