MySQL, как сделать внутреннее соединение со вторым внутренним соединением к той же таблице? - PullRequest
1 голос
/ 02 февраля 2012

У меня есть две таблицы, одна с примечаниями

id, note, client#, flag, employee#, date

Другая с сотрудниками

id, employee#

Я хочу найти все заметки, которые имеют флаг "N", но НЕНЕ имеет флаг "Y" для той же даты и номера клиента, но только для сотрудников, которые находятся в таблице сотрудников.

Например, я начинаю с:

1  mynote   123   Y   abc   1/1/2011
2  mynote   123   N   abc   1/1/2011
3  mynote   124   N   abc   1/1/2011
4  mynote   124   N   ccc   1/1/2011

(вмоя таблица сотрудников У меня есть сотрудник abc)

, поэтому я начал с:

SELECT * from notes a inner join employees b on a.employee = b.employee WHERE a.flag = 'N'

Это работает, я получаю то, что выглядит как резонный список заметок только для сотрудников, которые в настоящее время находятся втаблица сотрудников (например, только abc - записи 2 и 3 выше).

Теперь мне нужно получить обратно только запись 3, так как она представляет собой запись "N" и не имеет соответствующей записи "Y" для этой же записи.дата и клиент #.

Мне просто кажется, что я не могу получить дополнительную часть, чтобы добавить ее.

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Попробуйте использовать союз для этого. Таким образом, вы можете работать с 2 различными запросами.

0 голосов
/ 02 февраля 2012

Если вы переместите выражение flag = в предложение ON, оно станет более простым:

SELECT * from employees e
inner join notes n1
on n1.employee = e.employee
  AND n1.flag = 'N'
inner join notes n2
ON n2.employee = e.employee
  AND n2.client = n1.client AND n2.date = n1.date AND n2.flag = 'Y'

Я также позаимствовал улучшенные псевдонимы у dasblinkenlight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...