2016-05-20 2 views
1

У меня есть следующие таблицы:MySql - Получить кортежей записей с таким же иностранным атрибутом

работник (ID, имя_файл, LNAME дня рождения)

works_on (worker_id, TASK_ID) ,

Теперь я хочу получить кортежи всех работников, работающих над одной задачей. Моя идея состояла в том, чтобы присоединиться к работнику с works_on, а затем снова присоединиться к worker. В основном это работает, но у меня есть дубликаты, такие как:

John Smith, Walther White 

Walther White, John Smith 

Надеюсь, вы можете мне помочь.

Джон

ответ

2

Вы можете использовать следующий запрос:

SELECT t1.fname, t1.lname, t4.fname, t4.lname, t2.task_id 
FROM worker AS t1 
JOIN works_on AS t2 ON t1.id = t2.worker_id 
JOIN works_on AS t3 ON t2.task_id = t3.task_id AND t2.worker_id < t3.worker_id 
JOIN worker AS t4 ON t3.worker_id = t4.id 

Хитрость здесь предикат в предложении второго JOIN операции ON:

t2.worker_id < t3.worker_id 

Это получает в id работника, работающего в том же проекте , предоставленногоid значение больше, чем id значение t1worker стол. Таким образом, повторяющиеся пары исключаются.

Demo here

+0

Спасибо, не могу поверить, что iv'e был stucked на это в течение столь долгого времени :) – JohnDew

+0

@JohnDew рад, что смог помочь и приветствовать в Stack Overflow. Пожалуйста, отметьте это или любой другой ответ, как принято, если это поможет вам решить вашу проблему. –

Смежные вопросы