Для правильного тестирования я добавил несколько продавцов:
INSERT INTO `SalesMan` (`sid`, `sname`, `manager`, `id`) VALUES
('1', 'john', 'fingao', '2'),
('2', 'bekc', 'dilda', '3'),
('3', 'aaa', 'elda', '4'),
('4', 'erjan', 'rrrrokcks', '1'),
('5', 'john', 'fingao', '1'),
('6', 'benny', 'fingao', '1'),
('7', 'silvia', 'fingao', '1'),
('8', 'peter', 'dilda', '2'),
('9', 'karen', 'dilda', '2');
Так как вас интересуют записи в RetailOutlet
, я изменил порядок объединения, так что запись в форме RetailOutlet
основа вашего поиска. Затем я делаю обычные JOIN и GROUP BY SalesMan
, исключая записи, которые не имеют ровно одну запись:
SELECT *
FROM RetailOutlet r
INNER JOIN SalesMan s ON s.id = r.id
WHERE r.Location NOT LIKE 'newyork'
GROUP BY s.id
HAVING count(s.id) = 1
ORDER by s.sname DESC
. Этот dbfiddle показывает рабочие шаги от создания таблиц до последний запрос.
Предупреждение: Нормальной практикой является использование идентификатора для чего-либо, кроме текущего идентификатора таблицы. Использование id для столбца, который ссылается на другую таблицу, в то время как sid именуется локальными таблицами фактический id, скорее всего, запутает других разработчиков. Я предлагаю вам изменить на:
CREATE TABLE IF NOT EXISTS `SalesMan` (
`id` int(6) unsigned NOT NULL,
`sname` varchar(200) NOT NULL,
`manager` int(4) unsigned NOT NULL,
`rid` int(6) unsigned NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`rid`) REFERENCES RetailOutlet (`id`)
) DEFAULT CHARSET=utf8;
.. и соответственно изменить ваши вставки и запросы.