Есть ли способ поиска в базе данных SQL строк с указанными c отношениями? - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь сформулировать запрос SQL, который можно использовать для поиска сотрудников, которые управляют определенными c клиентами. У меня есть структура с тремя базами данных, одна таблица для сотрудников и одна для клиентов, а третья таблица соединяет идентификаторы. Например, когда я хочу найти сотрудников, которые управляют клиентами Джеффа и Билла, я сначала попробую сделать следующее:

SELECT e.name FROM employees e JOIN manages m ON e.emp_id = m.emp_id JOIN clients c ON m.cli_id = c.cli_id
WHERE c.cli_name = 'Jeff' AND c.cli_name = 'Bill';

Однако в этом запросе есть очевидный логический недостаток, поскольку он пытается найти строка, где два взаимоисключающих факта верны. Я пытался решить эту проблему путем группировки по имени сотрудника и проверки, какие группы имеют эти свойства, но, похоже, это не работает. Должен быть какой-то способ заставить это работать, но мне не удалось найти его в Интернете. Идеи? * * 1004

1 Ответ

0 голосов
/ 10 апреля 2020

Использовать агрегацию. При условии отсутствия дубликатов:

SELECT e.name
FROM employees e JOIN
     manages m 
     ON e.emp_id = m.emp_id JOIN 
     clients c
      ON m.cli_id = c.cli_id
WHERE c.cli_name IN ('Jeff', 'Bill')   -- match names with both clients
GROUP BY e.name
HAVING COUNT(*) = 2;                   -- keep only names that have two matches
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...